(开发篇) 图片/图表研究~ .net图片档案系列~图片质量和参数修改(附压缩图片代码)

1.问题说明

  一般情况下,存储图片只需要使用BitMap.Save(string Path,ImageFormat)函数即可,但是默认的jpeg保存质量应该是在60左右.如果默认值不能满足我们的需求,那么就需要根据实际需求修改图片的保存质量.

2.解决方案

  ImageCodecInfo类指定需要保存的格式(如jpg等等).

  System.Drawing.Imaging.Encoder类用于定制图片需要呈现的方式和各种参数,例如图片质量参数(Quality),扫描方法参数,色度表参数,压缩参数(Compression),颜色深度(ColorDepth)等等,该类型是EncoderParameter(构造函数)的参数之一.

  EncoderParameter用于存放所有关于当前图片的修改,一种修改(即一个不同的Encoder)存放入一个EncoderParameter,最后汇总到EncoderParameters中.就Encoder.Quality而言,Quality 类别指定图像的压缩级别。 在用于构造 EncoderParameter 时,质量类别的有用值范围为从 0 到 100。 指定的数值越低,压缩越高,因此图像的质量越低。 值为 0 时,图像的质量最差;值为 100 时,图像的质量最佳.

  EncoderParameters则是EncoderParameter类的集合数组,是 BitMap.Save(String, ImageCodecInfo, EncoderParameters) 的参数之一.

 

  方法:对System.Drawing.Imaging.Encoder设置,然后通过System.Drawing.Imaging.Encoder构造出来EncoderParameter类,将EncoderParameter传递给EncoderParameters数组,从而得到一个完全符合自己意愿的图片!

附压缩图片源代码

 1 #region 压缩图片
2
3 /// <summary>
4 /// 压缩图片
5 /// </summary>
6 /// <param name="filePath">要压缩的图片的路径</param>
7 /// <param name="filePath_wy">压缩后的图片的路径</param>
8 public void WYang(string filePath, string filePath_wy)
9 {
10 //Bitmap
11 Bitmap bmp = null;
12
13 //ImageCoderInfo
14 ImageCodecInfo ImageCoderType = null;
15
16 //Encoder
17 System.Drawing.Imaging.Encoder ImageEncoder = null;
18
19 //EncoderParameter
20 EncoderParameter ep = null;
21
22 //EncoderParameters
23 EncoderParameters epArray = null;
24
25 try
26 {
27 bmp = new Bitmap(filePath);
28
29 ImageCoderType = this.getImageCoderInfo("image/jpeg");
30
31 ImageEncoder = System.Drawing.Imaging.Encoder.Quality;
32
33 epArray = new EncoderParameters(1);
34
35 ep = new EncoderParameter(ImageEncoder, 10L);
36 epArray.Param[0] = ep;
37 bmp.Save(filePath_wy, ImageCoderType, epArray);
38 }
39 catch (Exception ex)
40 {
41 throw new Exception(ex.Message);
42 }
43 finally
44 {
45 bmp.Dispose();//释放资源
46
47 ep.Dispose();
48
49 epArray.Dispose();
50 }
51 }
52
53 /// <summary>
54 /// 获取图片编码类型信息
55 /// </summary>
56 /// <param name="ImageCoderType">编码类型</param>
57 /// <returns>ImageCodecInfo</returns>
58 private ImageCodecInfo getImageCoderInfo(string ImageCoderType)
59 {
60 ImageCodecInfo[] coderTypeArray = ImageCodecInfo.GetImageEncoders();
61
62 foreach (ImageCodecInfo coderType in coderTypeArray)
63 {
64 if (coderType.MimeType.Equals(ImageCoderType))
65 return coderType;
66 }
67 return null;
68 }
69
70 #endregion 压缩图片

♣ getImageCoderInfo方法感觉比较简单,就不做过多的解释了,如果需要,再说呗~

再附图片效果比较

posted @ 2012-04-01 16:26  phoenix_fling  阅读(1766)  评论(3编辑  收藏  举报