How can I compress an image to be lower than 1kb? Is it possible?
Here Is the code that I have managed to create using some references online.
It reduces the image file size up to 1.2 kb but the image quality is greatly reduced
Function For Compressing The Image
private void SaveAndCompressImage()
{
if (OriginalImage == null) return;
long compression = long.Parse(20);
string file_name = Directory.GetCurrentDirectory() +
"filename.jpg";
OriginalImage = new Bitmap(OriginalImage, new Size(100, 100));
SaveJpg(OriginalImage, file_name, compression);
// Display the result without locking the file.
UserPic.Image = LoadBitmapUnlocked(file_name);
Image PictureBoxPic = UserPic.Image;
Image pic = new Bitmap(PictureBoxPic, new Size(100, 100));
// Used For applying grayscale reduces image file size
Image gray_scale_image = ToolStripRenderer.CreateDisabledImage(pic);
Image output = gray_scale_image;
output.Save( file, ImageFormat.Jpeg);
// Used to Convert Image to Base64
ConvertImageToBase64 = Functions.CreateBase64Image(file);
}
Used For Saving the Image with The Compression Level
// Save the file with a specific compression level.
private void SaveJpg(Image image, string file_name, long compression)
{
try
{
EncoderParameters encoder_params = new EncoderParameters(1);
encoder_params.Param[0] = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality, compression);
ImageCodecInfo image_codec_info = GetEncoderInfo("image/jpeg");
File.Delete(file_name);
image.Save(file_name, image_codec_info, encoder_params);
}
catch (Exception ex)
{
}
}
Load a bitmap without locking it.
private Bitmap LoadBitmapUnlocked(string file_name)
{
using (Bitmap bm = new Bitmap(file_name))
{
return new Bitmap(bm);
}
}
Return an ImageCodecInfo object for this mime type
private ImageCodecInfo GetEncoderInfo(string mime_type)
{
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (int i = 0; i <= encoders.Length; i++)
{
if (encoders[i].MimeType == mime_type) return encoders[i];
}
return null;
}