Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compress jpg image?

I have jpg image format with size of 3300K.

I try to compress the image => so i changed the image size but still i have very big size of the file ( ~ 800K )

The change size method code:

    internal static Image resizeImage( Image imgToResize )
    {
        Bitmap b = new Bitmap( 300, 300 );

        using( Graphics g = Graphics.FromImage( ( Image )b ) )
        {
            //g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.InterpolationMode = InterpolationMode.Low;

            g.DrawImage( imgToResize, 0, 0, 300, 300 );

            imgToResize.Dispose();
        }

        return ( Image )b;
    }

I must compress the image - even if the quality of the image will be less then the original.

How can i do it ?

like image 397
Yanshof Avatar asked Dec 16 '22 16:12

Yanshof


2 Answers

mg = image

newsize = height and width

Call Resize function using following code

Bitmap mg = new Bitmap(strUploadPath);
Size newSize = new Size(Convert.ToInt32(DispMaxWidth), Convert.ToInt32(DispMaxHeight));
Bitmap bp = ResizeImage(mg, newSize);
if (bp != null)
bp.Save(strUploadPath, System.Drawing.Imaging.ImageFormat.Jpeg);

private Bitmap ResizeImage(Bitmap mg, Size newSize)
        {
            double ratio = 0d;
            double myThumbWidth = 0d;
            double myThumbHeight = 0d;
            int x = 0;
            int y = 0;

            Bitmap bp;

            if ((mg.Width / Convert.ToDouble(newSize.Width)) > (mg.Height /
            Convert.ToDouble(newSize.Height)))
                ratio = Convert.ToDouble(mg.Width) / Convert.ToDouble(newSize.Width);
            else
                ratio = Convert.ToDouble(mg.Height) / Convert.ToDouble(newSize.Height);
            myThumbHeight = Math.Ceiling(mg.Height / ratio);
            myThumbWidth = Math.Ceiling(mg.Width / ratio);

            //Size thumbSize = new Size((int)myThumbWidth, (int)myThumbHeight);
            Size thumbSize = new Size((int)newSize.Width, (int)newSize.Height);
            bp = new Bitmap(newSize.Width, newSize.Height);
            x = (newSize.Width - thumbSize.Width) / 2;
            y = (newSize.Height - thumbSize.Height);
            // Had to add System.Drawing class in front of Graphics ---
            System.Drawing.Graphics g = Graphics.FromImage(bp);
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;
            Rectangle rect = new Rectangle(x, y, thumbSize.Width, thumbSize.Height);
            g.DrawImage(mg, rect, 0, 0, mg.Width, mg.Height, GraphicsUnit.Pixel);

            return bp;

        }
like image 103
sikender Avatar answered Dec 30 '22 08:12

sikender


JPG images are already compressed.

You can try to decrease size of image using different algorithm of compression of decrease quality of image.

In this case try to set of CompositingQuality or SmoothingMode properties to better (for you) values -- maybe there are others properties which can help.

like image 38
Grzegorz Gierlik Avatar answered Dec 30 '22 06:12

Grzegorz Gierlik