我有以下代码行,它接受我的HttpPostedFileBase
并将其转换为图像。
我搞乱了Encoder Parameteres试图调整图像大小,但似乎无法做到这一点。
将图像大小调整为250x250的最佳方法是什么?
我还希望它将图像的中间部分视为250x250矩形,而不是随机的某个地方。
在数据库中转换和保存图像的最节省空间的方法是什么?
请注意,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;
}
}
答案 0 :(得分:1)
最好的方法是使用像ImageResizer这样的既定图书馆;这样,你就可以避免重新发明轮子。如果您担心空间效率(文件大小),请使用最大压缩的JPEG格式。请注意,使用JPEG的有损编码会大大降低图像质量。如果要使用无损编码,请尝试PNG。根据我的经验,在.NET中压缩PNG图像非常困难。我徒劳地搜索了一个可以执行此操作的单个库,而我发现的只是胖客户端Windows应用程序。