发现用GetThumbnailImage的方式生成缩略图,如果是大图片,效果还可以,如果是小图片,效果就很差了。改用拉伸图片的方式效果比较不错。
using System;
using System.Drawing;
using System.Drawing.Imaging;
public static void CompressJpeg(string strPath, int intWidth, long lngQuality)
{
var img = Image.FromFile(strPath); // 如果不是图片会出错。
if(img.Width <= intWidth)
{
img.Dispose();
return;
}
var intHeight = img.Height * intWidth / img.Width;
// 创建位图及相关联的图形处理工具,在位图上画缩略图
var thm = new Bitmap(intWidth, intHeight);
var grp = Graphics.FromImage(thm);
grp.DrawImage(img, 0, 0, intWidth, intHeight);
// 释放占用的图片文件
img.Dispose();
grp.Dispose();
// 设置图片质量
var ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(Encoder.Quality, lngQuality);
// 保存缩略图
// thm.Save(strPath); // 如果不设置图片质量,可直接保存
thm.Save(strPath, ImageCodecInfo.GetImageEncoders().FirstOrDefault(i => i.MimeType == "image/jpeg"), ep);
thm.Dispose();
}