62,041
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 执行: 压缩原图 System.Drawing.Bitmap 对象保存到文件 (JPEG格式压缩)
/// </summary>
/// <param name="source">原图 System.Drawing.Bitmap 对象: System.Drawing.Bitmap</param>
/// <param name="level">压缩等级(值越高图像质量越好,文件越大,范围在1~100之间): int</param>
/// <param name="path">保存路径(包含完整路径,文件名及其扩展名): string</param>
public void Compress(Bitmap source, int level, string path)
{
if (level < 1 || level > 99)
throw new ArgumentException("压缩等级值范围在0~100之间");
long[] quality = new long[1];
quality[0] = level;
using (EncoderParameters Parameters = new EncoderParameters())
{
using (EncoderParameter Parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality))
{
Parameters.Param[0] = Parameter;
source.Save(path, ImageCodecInfo.GetImageEncoders()[1], Parameters);
}
}
}
/// <summary>
/// 压缩到指定尺寸
/// </summary>
/// <param name="oldfile">原文件</param>
/// <param name="newfile">新文件</param>
public bool Compress(string oldfile, string newfile)
{
try
{
System.Drawing.Image img = System.Drawing.Image.FromFile(oldfile);
System.Drawing.Imaging.ImageFormat thisFormat = img.RawFormat;
Size newSize = new Size(100, 125);
Bitmap outBmp = new Bitmap(newSize.Width, newSize.Height);
Graphics g = Graphics.FromImage(outBmp);
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(img, new Rectangle(0, 0, newSize.Width, newSize.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel);
g.Dispose();
EncoderParameters encoderParams = new EncoderParameters();
long[] quality = new long[1];
quality[0] = 100;
EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
encoderParams.Param[0] = encoderParam;
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICI = null;
for (int x = 0; x < arrayICI.Length; x++)
if (arrayICI[x].FormatDescription.Equals("JPEG"))
{
jpegICI = arrayICI[x]; //设置JPEG编码
break;
}
img.Dispose();
if (jpegICI != null) outBmp.Save(newfile, System.Drawing.Imaging.ImageFormat.Jpeg);
outBmp.Dispose();
return true;
}
catch
{
return false;
}
}