Click here to Skip to main content
Click here to Skip to main content

C#: Image resize, convert, and save

, 25 Feb 2013 CPOL
Rate this:
Please Sign up or sign in to vote.
Resize an image and save in JPEG format using C#.

Introduction

If you work on a project that involves some image processing then you might come across where you need to do image resizing, converting etc.. This article will give you C# code snippet on how to resize an image to desired height and width without affecting the aspect ratio and save the image in JPEG format with the specified quality. Below given code handles the following

  • Resize a image to specified width and height 
  • Maintain the aspect ratio While resizing
  • Convert to RGB pixel format if image data is in any other format like YCCK, CMYK
  • Covert the image to JPEG format
  • Save the image in the given file path with the specified quality

Code

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Linq;

/// <summary>
/// Class contaning method to resize an image and save in JPEG format
/// </summary>
public class ImageHandler
{ 
    /// <summary>
    /// Method to resize, convert and save the image.
    /// </summary>
    /// <param name="image">Bitmap image.</param>
    /// <param name="maxWidth">resize width.</param>
    /// <param name="maxHeight">resize height.</param>
    /// <param name="quality">quality setting value.</param>
    /// <param name="filePath">file path.</param>      
    public void Save(Bitmap image, int maxWidth, int maxHeight, int quality, string filePath)
    {
        // Get the image's original width and height
        int originalWidth = image.Width;
        int originalHeight = image.Height;

        // To preserve the aspect ratio
        float ratioX = (float)maxWidth / (float)originalWidth;
        float ratioY = (float)maxHeight / (float)originalHeight;
        float ratio = Math.Min(ratioX, ratioY);

        // New width and height based on aspect ratio
        int newWidth = (int)(originalWidth * ratio);
        int newHeight = (int)(originalHeight * ratio);
 
        // Convert other formats (including CMYK) to RGB.
        Bitmap newImage = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb);

        // Draws the image in the specified size with quality mode set to HighQuality
        using (Graphics graphics = Graphics.FromImage(newImage))
        {
            graphics.CompositingQuality = CompositingQuality.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.DrawImage(image, 0, 0, newWidth, newHeight);
        }

        // Get an ImageCodecInfo object that represents the JPEG codec.
        ImageCodecInfo imageCodecInfo = this.GetEncoderInfo(ImageFormat.Jpeg);

        // Create an Encoder object for the Quality parameter.
        Encoder encoder = Encoder.Quality;

        // Create an EncoderParameters object. 
        EncoderParameters encoderParameters = new EncoderParameters(1);

        // Save the image as a JPEG file with quality level.
        EncoderParameter encoderParameter = new EncoderParameter(encoder, quality);
        encoderParameters.Param[0] = encoderParameter;
        newImage.Save(filePath, imageCodecInfo, encoderParameters);
    }

    /// <summary>
    /// Method to get encoder infor for given image format.
    /// </summary>
    /// <param name="format">Image format</param>
    /// <returns>image codec info.</returns>
    private ImageCodecInfo GetEncoderInfo(ImageFormat format)
    {
        return ImageCodecInfo.GetImageDecoders().SingleOrDefault(c => c.FormatID == format.Guid);
    }
}

Hope it helps someone!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

John-ph
Software Developer (Senior)
India India


Comments and Discussions

 
Question5 Stars PinmemberRafaDomGal4-Oct-14 4:12 
QuestionThank you Pinmembernonintanon8-Aug-14 10:45 
QuestionThank you PinmemberMember 1083521621-May-14 9:14 
AnswerRe: Thank you PinmemberJohn-ph21-May-14 20:12 
Questionfew questions Pinmembermickhu3418-Mar-14 22:03 
GeneralMy vote of 5 PinmemberPascualito27-Oct-13 12:40 
Questionimage converting PinmemberWollaston24-Mar-13 22:07 
AnswerRe: image converting PinmemberJimBob SquarePants8-Jul-13 23:17 
GeneralMy vote of 4 PinmemberWhiteOsoBDN26-Feb-13 2:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.141015.1 | Last Updated 25 Feb 2013
Article Copyright 2013 by John-ph
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid