Mazen Abu Taweelih
Mazen Abu Taweelih

Reputation: 647

Making image thumbnail smaller

I am having image sharing application where users upload images and I take thumbnails of these images...how ever , everything is working fine but sometimes the image thumbnail(600 * 800) size is almost 1 mb which is very huge is there anyway to modify the image resolution or something to make the size like..100 kb or something . this is my code .

    Bitmap bmp = new Bitmap(Width, Height);
            System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);
            gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
            gr.PixelOffsetMode = PixelOffsetMode.HighQuality;

            System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, Width, Height);
            System.Drawing.Size rs = new System.Drawing.Size();
            rs.Height = Height;
            rs.Width = Width;
            gr.DrawImage(originalImage, new Rectangle(new Point(0, 0), rs), 0, 0,     originalImage.Width, originalImage.Height, GraphicsUnit.Pixel);
            string thumbnailPath = string.Concat(pathToSaveIn, thumbnailName);
            bmp.Save(thumbnailPath);
            gr.Dispose();

Upvotes: 0

Views: 765

Answers (3)

Jeremy McGee
Jeremy McGee

Reputation: 25210

The image resizing code looks OK (at first glance). However, you're saving the image in bitmap format, which is lossless -- hence the large size of the file.

You probably want to use JPEG instead for a thumbnail: for photographs, etc., this gives good compression.

This may help:

    public void SaveImage(Bitmap image, string filename)
    {
        long quality = 80L;  // adjust as appropriate

        var qualityEncoder = Encoder.Quality;

        using (var encoderParameter = new EncoderParameter(qualityEncoder, quality))
        using (var encoderParams = new EncoderParameters(1))
        {
            encoderParams.Param[0] = encoderParameter;
            var jpegEncoder = GetEncoder(ImageFormat.Jpeg);
            image.Save(filename, jpegEncoder, encoderParams);
        }
    }

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

        return codecs
            .Where(codec => codec.FormatID == format.Guid)
            .FirstOrDefault();
    }

Upvotes: 3

hawkke
hawkke

Reputation: 4262

Try System.Drawing.Image.GetThumbnailImage. I haven't used it myself, but looks like it might work.

Upvotes: 0

Michael Cox
Michael Cox

Reputation: 1301

This looks like .NET. Scott Hanselman had a good blog post on this. Essentially a review of a package on NuGet that helps with this.

http://www.hanselman.com/blog/NuGetPackageOfWeek11ImageResizerEnablesCleanClearImageResizingInASPNET.aspx

Upvotes: 0

Related Questions