主要用到System.Drawing.Imaging命名空間下的ImageCodecInfo、Encoder、EncoderParameter、EncoderParameters四個類數組
實現代碼測試
代碼是來自MSDN上的,本身也是初學,寫了些註釋。ui
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是原圖spa