You can use the system.Drawing.Imaging
library to compress the image. This library compresses the image based on quality
. You have to create a formula to select this number from 0 to 100
for different sizes. sample code:
public static void CompressImage(string SoucePath, string DestPath, int quality)
{
using (Bitmap bmp1 = new Bitmap(SoucePath))
{
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
System.Drawing.Imaging.Encoder QualityEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(QualityEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp1.Save(DestPath, jpgEncoder, myEncoderParameters);
}
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
Now I pass a 2.5MB image to this function:
CompressImage("N.jpg", "N_compress.jpg", 85);
then the result:
