首页 > 技术文章 > .Net上传图片压缩质量,不改变尺寸

dingshuanglei 2018-05-17 17:52 原文

图片上传有很多情况需要考虑,例如:生成缩略图、压缩尺寸、压缩质量、压缩尺寸质量、添加水印等等常见情况。最近遇到图片质量压缩不改变大小的问题,参考:听浪

 1 #region 图片压缩
 2 /// <summary>
 3 /// 图片压缩(降低质量以减小文件的大小)
 4 /// </summary>
 5 /// <param name="srcBitMap">传入的Bitmap对象</param>
 6 /// <param name="destFile">压缩后的图片保存路径</param>
 7 /// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
 8 public static void Compress(Bitmap srcBitMap, string destFile, long level)
 9 {
10     Stream s = new FileStream(destFile, FileMode.Create);
11     Compress(srcBitMap, s, level);
12     s.Close();
13 }
14 
15 /// <summary>
16 /// 编码信息
17 /// </summary>
18 /// <param name="mimeType"></param>
19 /// <returns></returns>
20 private static ImageCodecInfo GetEncoderInfo(String mimeType)
21 {
22     int j;
23     ImageCodecInfo[] encoders;
24     encoders = ImageCodecInfo.GetImageEncoders();
25     for (j = 0; j < encoders.Length; ++j)
26     {
27         if (encoders[j].MimeType == mimeType)
28             return encoders[j];
29     }
30     return null;
31 }
32 
33 /// <summary>
34 /// 图片压缩(降低质量以减小文件的大小)
35 /// </summary>
36 /// <param name="srcBitmap">传入的Bitmap对象</param>
37 /// <param name="destStream">压缩后的Stream对象</param>
38 /// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
39 private static void Compress(Bitmap srcBitmap, Stream destStream, long level)
40 {
41     ImageCodecInfo myImageCodecInfo;
42     Encoder myEncoder;
43     EncoderParameter myEncoderParameter;
44     EncoderParameters myEncoderParameters;
45     // Get an ImageCodecInfo object that represents the JPEG codec.
46     myImageCodecInfo = GetEncoderInfo("image/jpeg");
47     // Create an Encoder object based on the GUID
48     // for the Quality parameter category.
49     myEncoder = Encoder.Quality;
50     // Create an EncoderParameters object.
51     // An EncoderParameters object has an array of EncoderParameter
52     // objects. In this case, there is only one
53     // EncoderParameter object in the array.
54     myEncoderParameters = new EncoderParameters(1);
55     // Save the bitmap as a JPEG file with 给定的 quality level
56     myEncoderParameter = new EncoderParameter(myEncoder, level);
57     myEncoderParameters.Param[0] = myEncoderParameter;
58     srcBitmap.Save(destStream, myImageCodecInfo, myEncoderParameters);
59 }
60 #endregion

参考:听浪 http://www.cnblogs.com/ainidewen/p/4556543.html

推荐阅读