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.