Solving development problems  |  About this blog

Saving high quality JPG in C# or ASP.NET

Just use this piece of code or read at this MSDN article:

private void VaryQualityLevel()
{
	// Get a bitmap.
	Bitmap bmp1 = new Bitmap(@"c:\TestPhoto.jpg");
	ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);

	// Create an Encoder object based on the GUID
	// for the Quality parameter category.
	System.Drawing.Imaging.Encoder myEncoder =
	System.Drawing.Imaging.Encoder.Quality;

	// Create an EncoderParameters object.
	// An EncoderParameters object has an array of EncoderParameter
	// objects. In this case, there is only one
	// EncoderParameter object in the array.
	EncoderParameters myEncoderParameters = new EncoderParameters(1);

	EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);
	myEncoderParameters.Param[0] = myEncoderParameter;
	bmp1.Save(@"c:\TestPhotoQualityFifty.jpg", jgpEncoder, myEncoderParameters);

	myEncoderParameter = new EncoderParameter(myEncoder, 100L);
	myEncoderParameters.Param[0] = myEncoderParameter;
	bmp1.Save(@"c:\TestPhotoQualityHundred.jpg", jgpEncoder, myEncoderParameters);

	// Save the bitmap as a JPG file with zero quality level compression.
	myEncoderParameter = new EncoderParameter(myEncoder, 0L);
	myEncoderParameters.Param[0] = myEncoderParameter;
	bmp1.Save(@"c:\TestPhotoQualityZero.jpg", jgpEncoder, myEncoderParameters);

}

...

private ImageCodecInfo GetEncoder(ImageFormat format)
{
	ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

	foreach (ImageCodecInfo codec in codecs)
	{
	if (codec.FormatID == format.Guid)
	{
	return codec;
	}
	}
	return null;
}

November 13th, 2009

blog comments powered by Disqus