ASP.Net MVC Загрузка изображений Изменение размера путем уменьшения или заполнения - PullRequest
4 голосов
/ 17 июня 2009

Пользователь сможет загрузить изображение. Если изображение больше установленного размера, я хочу уменьшить его до этого размера. Очевидно, что это не обязательно должно совпадать из-за соотношений, ширина будет ключевым размером, поэтому высота будет переменной.

Если изображение меньше заданного размера, я хотел бы создать новое изображение заданного размера с фоном определенного цвета, а затем центрировать загруженное изображение в нем, поэтому в результате получается оригинал с подбитым цветом.

Любые примеры кода или ссылки с благодарностью

Ответы [ 2 ]

10 голосов
/ 17 июня 2009

Вот фрагмент кода, который я быстро выбрал для изменения его размера в зависимости от ширины. Я уверен, что вы могли бы выяснить, как добавить цвет фона в растровое изображение. Это не полный код, а просто идея, как что-то делать.

public static void ResizeLogo(string originalFilename, string resizeFilename)
{
    Image imgOriginal = Image.FromFile(originalFilename);

    //pass in whatever value you want for the width (180)
    Image imgActual = ScaleBySize(imgOriginal, 180);
    imgActual.Save(resizeFilename);
    imgActual.Dispose();
}

public static Image ScaleBySize(Image imgPhoto, int size)
{
    int logoSize = size;

    float sourceWidth = imgPhoto.Width;
    float sourceHeight = imgPhoto.Height;
    float destHeight = 0;
    float destWidth = 0;
    int sourceX = 0;
    int sourceY = 0;
    int destX = 0;
    int destY = 0;

    // Resize Image to have the height = logoSize/2 or width = logoSize.
    // Height is greater than width, set Height = logoSize and resize width accordingly
    if (sourceWidth > (2 * sourceHeight))
    {
        destWidth = logoSize;
        destHeight = (float)(sourceHeight * logoSize / sourceWidth);
    }
    else
    {
        int h = logoSize / 2;
        destHeight = h;
        destWidth = (float)(sourceWidth * h / sourceHeight);
    }
    // Width is greater than height, set Width = logoSize and resize height accordingly

    Bitmap bmPhoto = new Bitmap((int)destWidth, (int)destHeight, 
                                PixelFormat.Format32bppPArgb);
    bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);

    Graphics grPhoto = Graphics.FromImage(bmPhoto);
    grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;

    grPhoto.DrawImage(imgPhoto,
        new Rectangle(destX, destY, (int)destWidth, (int)destHeight),
        new Rectangle(sourceX, sourceY, (int)sourceWidth, (int)sourceHeight),
        GraphicsUnit.Pixel);

    grPhoto.Dispose();

    return bmPhoto;
}
0 голосов
/ 17 июня 2009

Вы можете просто загрузить файл в растровый объект:

http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx

Тогда просто проверьте ширину объекта. Для второй части вашей проблемы, я бы порекомендовал использовать такой инструмент, как ImageMagick

http://www.imagemagick.org/script/index.php

для точного изменения размера первого изображения или создания фонового изображения и объединения двух изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...