Setting the compression level when saving JPEG images

 

Images are serialized by an encoder specially adapted for the image format. Certain encoders, such as the JPEG encoder, can be instructed to alter the method serialization by the use of encoder parameters which specify the characteristics of the data written to the file or stream. The EncoderParameter class provides encapsulation for these different settings and may be applied to the specific image encoder before an image is saved.

 

In the case of Jpeg images, you can write files with differing levels of compression by using the specialized Quality encoder and a suitable compression setting as shown in the code in the following listing.

 

//Load a bitmap from file

Bitmap bm=(Bitmap)Image.FromFile("mypic.jpg");

 

//Get the list of available encoders

ImageCodecInfo[] codecs=ImageCodecInfo.GetImageEncoders();

 

//find the encoder with the image/jpeg mime-type

ImageCodecInfo ici=null;

foreach(ImageCodecInfo codec in codecs)

{

      if(codec.MimeType=="image/jpeg")

            ici=codec;

}

 

//Create a collection of encoder parameters (we only need one in the collection)

EncoderParameters ep=new EncoderParameters();

     

//We'll save images with 25%, 50%, 75% and 100% quality as compared with the original

for(int x=25;x<101;x+=25)

{

      //Create an encoder parameter for quality with an appropriate level setting

      ep.Param[0]=new EncoderParameter(Encoder.Quality,(long)x);

      //Save the image with a filename that indicates the compression quality used

      bm.Save("C:\\quality"+x.ToString()+".jpg",ici,ep);

}

 

 Back to the GDI+ FAQ

 

Copyright Robert W. Powell 2003 All Rights Reserved