主要用到System.Drawing.Imaging命名空间下的ImageCodecInfo、Encoder、EncoderParameter、EncoderParameters四个类
实现代码
代码是来自MSDN上的,自己也是初学,写了些注释。
1 private void VaryQualityLevel() 2 { 3 4 Bitmap bmp1 = new Bitmap(@"7.jpg"); 5 ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg); 6 7 //创建一个Endoder对象 8 System.Drawing.Imaging.Encoder myEncoder = 9 System.Drawing.Imaging.Encoder.Quality; 10 11 // 创建一个EncoderParameters对象. 12 // 一个EncoderParameters对象有一个EncoderParameter数组对象 13 EncoderParameters myEncoderParameters = new EncoderParameters(1); 14 15 EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);//这里的50L用来设置保存时的图片质量 16 //测试时400多K的图片保存为100多K,图片失真也不是很厉害 17 myEncoderParameters.Param[0] = myEncoderParameter; 18 bmp1.Save(@"TestPhotoQualityFifty.jpg", jgpEncoder, myEncoderParameters); 19 20 myEncoderParameter = new EncoderParameter(myEncoder, 100L);//设置为100时,比原图大了几KB。 21 myEncoderParameters.Param[0] = myEncoderParameter; 22 bmp1.Save(@"TestPhotoQualityHundred.jpg", jgpEncoder, myEncoderParameters); 23 24 //设置为0是,图片失真 25 myEncoderParameter = new EncoderParameter(myEncoder, 0L); 26 myEncoderParameters.Param[0] = myEncoderParameter; 27 bmp1.Save(@"TestPhotoQualityZero.jpg", jgpEncoder, myEncoderParameters); 28 29 } 30 31 32 33 34 35 private ImageCodecInfo GetEncoder(ImageFormat format) 36 { 37 38 ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); 39 40 foreach (ImageCodecInfo codec in codecs) 41 { 42 if (codec.FormatID == format.Guid) 43 { 44 return codec; 45 } 46 } 47 return null; 48 }
图中7是原图