我的源图像是 2288px x 1712px 和 816kb。当我创建 1024 x 768 的缩略图时,文件大小是高分辨率源的两倍多(1.13mb - 1.8mb,取决于使用的方法)。
创建的源图像和缩略图是 .jpg
即使创建 299 x 224 的缩略图也是 180kb,而我在 GIMP 中手动创建的缩略图是 14kb。
我需要图像看起来不错,因此不能在尺寸质量上妥协。
我试过 Image.GetThumbnailImage ,它创建了一个 1.13mb 的文件,但我读到它会产生意想不到的结果。
大多数文章都说像这篇文章那样写代码:http: //www.codeproject.com/KB/GDI-plus/imageresize.aspx
这给了我一个 1.83mb 的缩略图。
与使用桌面应用程序做同样的事情相比,我是否应该期待更大的文件大小?
我尝试了 16 位而不是 24 位,并注释掉了“高质量”值,但我仍然无法将其低于 1mb。有任何想法吗?
Bitmap bmPhoto = new Bitmap(destWidth, destHeight,PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(image.HorizontalResolution,image.VerticalResolution);
Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
grPhoto.SmoothingMode = SmoothingMode.HighQuality;
grPhoto.PixelOffsetMode = PixelOffsetMode.HighQuality;
grPhoto.CompositingQuality = CompositingQuality.HighQuality;
编辑答案
我缺乏压缩。我的 1024 缩略图现在是 112kb。
Encoder qualityEncoder = Encoder.Quality;
//80L is the compression percentage
EncoderParameter ratio = new EncoderParameter(qualityEncoder, 80L);
// Add the quality parameter to the list
EncoderParameters codecParams = new EncoderParameters(1);
codecParams.Param[0] = ratio;
ImageCodecInfo jpegCodecInfo = GetEncoderInfo("image/jpeg");
bmPhoto.Save(Path.Combine(filepath, RenameImage(filename, appendName, replaceWholeString)), jpegCodecInfo, codecParams);
ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for(j = 0; j < encoders.Length; ++j)
{
if(encoders[j].MimeType.ToUpper() == mimeType.ToUpper())
return encoders[j];
}
return null;
}