4

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 ?

Yanshof
  • 9,659
  • 21
  • 95
  • 195

2 Answers2

10

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;

        }
sikender
  • 5,883
  • 7
  • 42
  • 80
2

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.

Grzegorz Gierlik
  • 11,112
  • 4
  • 47
  • 55
  • I know that this is already compressed format. But there is possible to improve the compressed level. I try to change the CompositingQuality && SmoothingMode - this is not change the image size. – Yanshof Mar 09 '11 at 09:00
  • So, maybe it's impossible with `Graphics` class. Try some tool like InfraView or Paint.NET to compress your image. If one of them can compress you image better find external library (maybe ImageMagick.NET?) which can do it from .NET code. – Grzegorz Gierlik Mar 09 '11 at 09:53