/// <summary>
/// 制作等比环切缩缩图
/// </summary>
public static bool MakeThumbnail(Image image, string savePath, int toWidth, int toHeight)
{
if (File.Exists(savePath))
{
File.SetAttributes(savePath, FileAttributes.Normal);
File.Delete(savePath);
}
if (image == null) return false;
int x = 0;
int y = 0;
int ow = image.Width;
int oh = image.Height;
if ((double)image.Width / image.Height > (double)toWidth / toHeight)
{
oh = image.Height;
ow = image.Height * toWidth / toHeight;
x = (image.Width - ow) / 2;
}
else
{
ow = image.Width;
oh = image.Width * toHeight / toWidth;
y = (image.Height - oh) / 2;
}
Bitmap bmPhoto = new Bitmap(toWidth, toHeight, PixelFormat.Format24bppRgb);
Graphics gbmPhoto = Graphics.FromImage(bmPhoto);
gbmPhoto.InterpolationMode = InterpolationMode.High;
gbmPhoto.SmoothingMode = SmoothingMode.HighQuality;
gbmPhoto.Clear(Color.White);
gbmPhoto.DrawImage(image, new Rectangle(0, 0, toWidth, toHeight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel);
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myImageCodecInfo = GetEncoderInfo("image/jpeg");
myEncoder = Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 99L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmPhoto.Save(savePath, myImageCodecInfo, myEncoderParameters);
gbmPhoto.Dispose();
bmPhoto.Dispose();
return true;
}