Selected C# Code Snippets [ previous - toc - next ]

Component For Resize Of Image Files

The following class shows how to resize files with good quality. (C# 3.0, .net 3.5)

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

using System.IO;

 

namespace com.ooit.edu {

 

    public static class GraphicsResize {

 

        private delegate void Logger(object obj);

 

 

        public static void Main() {

 

            Logger log = Console.WriteLine;

 

            log("START");

            // INPUT

            List<string> files = new List<string>();

            files.AddRange(Directory.GetFiles(@"c:\myimages", "*.jpg"));

            files.AddRange(Directory.GetFiles(@"c:\myimages", "*.gif"));

            files.AddRange(Directory.GetFiles(@"c:\myimages", "*.png"));

 

            //OUTPUT

            string outputDir = @"c:\resized-images";

 

            foreach (string file in files) {

                Image image = Image.FromFile(file);

                Image resizedImage = ResizeImageToWidth(image, 220, 165);

                string outputFileName =

                    Path.Combine(outputDir, Path.GetFileName(file));

                SaveImage(outputFileName, resizedImage);

            }

            log("DONE");

        }

      

        public static Image ResizeImageToWidth(Image image,

                int width, int maxHeight) {

            int sourceWidth = image.Width;

            int sourceHeight = image.Height;

            int height = width * sourceHeight / sourceWidth;

 

            if (height > maxHeight) {

                width = maxHeight * sourceWidth / sourceHeight;

                height = width * sourceHeight / sourceWidth;

            }

            Bitmap resizedImage = new Bitmap(width, height,

                              PixelFormat.Format32bppRgb);

            resizedImage.SetResolution(image.HorizontalResolution,

                             image.VerticalResolution);

 

            Graphics grPhoto = Graphics.FromImage(resizedImage);

            grPhoto.Clear(Color.Transparent);

            grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;

 

            grPhoto.DrawImage(image,

                new Rectangle(0, 0, width, height),

                new Rectangle(0, 0, sourceWidth, sourceHeight),

                GraphicsUnit.Pixel);

 

            grPhoto.Dispose();

            return resizedImage;

        }

 

        public static void SaveImage(string fileName, Image image) {

            ImageCodecInfo jpeg = null;

            ImageCodecInfo png = null;

            ImageCodecInfo gif = null;

            ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();

            foreach (ImageCodecInfo encoder in encoders) {

                jpeg = encoder.FormatDescription.Equals("JPEG") ? encoder : jpeg;

                png = encoder.FormatDescription.Equals("PNG") ? encoder : png;

                gif = encoder.FormatDescription.Equals("GIF") ? encoder : gif;

            }

 

            EncoderParameters encoderParameters = new EncoderParameters();

            encoderParameters.Param[0] =

                new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 90L);

 

            if (fileName.ToUpper().EndsWith("JPG") ||

                fileName.ToUpper().EndsWith("JPEG")) {

                image.Save(fileName, jpeg, encoderParameters);

            } else if (fileName.ToUpper().EndsWith("PNG")) {

                image.Save(fileName, png, encoderParameters);

            } else if (fileName.ToUpper().EndsWith("GIF")) {

                image.Save(fileName, gif, encoderParameters);

            } else {

                image.Save(fileName);

            }

        }

    }

 

}