HttpPostedFileBase для изменения размера изображения

У меня есть следующая строка кода, которая берет мой HttpPostedFileBase и преобразует его в изображение.

Я возился с Encoder Parameteres, чтобы попытаться изменить размер изображения, но, похоже, не могу этого сделать.

Каков наилучший способ изменить размер изображения до 250x250?

Я также предпочел бы взять середину изображения в виде прямоугольника размером 250х250, а не в произвольном месте.

Какой самый эффективный способ конвертировать и сохранить изображение, как это будет в базе данных?

Обратите внимание, что model.Image имеет тип HttpPostedFileBase,

var image = Image.FromStream(model.Image.InputStream, true, true);

ImageCodecInfo jpgInfo = ImageCodecInfo.GetImageEncoders()
    .Where(codecInfo => codecInfo.MimeType == "image/jpeg").First();
using (EncoderParameters encParams = new EncoderParameters(1))
{
    encParams.Param[0] = new EncoderParameter(Encoder.Quality, (long)50);

    //quality should be in the range [0..100]
    using (var ms = new MemoryStream())
    {
        // Convert Image to byte[]
        image.Save(ms, ImageFormat.Jpeg);
        byte[] imageBytes = ms.ToArray();

        // Convert byte[] to Base64 String
        string base64String = Convert.ToBase64String(imageBytes);
        image64 = base64String;
    }
}

1 ответ

Лучший способ - использовать установленную библиотеку, такую ​​как ImageResizer; Таким образом, вы избегаете повторного изобретения колеса. Если вас беспокоит эффективность использования пространства (размер файла), используйте формат JPEG с максимальным сжатием. Обратите внимание, что использование кодирования с потерями в формате JPEG значительно ухудшит качество изображения. Если вы хотите использовать кодировку без потерь, попробуйте PNG. По моему опыту, сжатие изображений PNG довольно сложно в.NET. Некоторое время назад я тщетно искал одну библиотеку, которая бы это делала, и все, что я нашел, было приложениями для толстых клиентов Windows.

Другие вопросы по тегам