Resize image in .NET
This will resize image to be 1024 height or width (whichever is bigger). Explore other options to look for things like image quality.
using (var image = Image.FromFile(file.FullName)) { int newHeight, newWidth; if (image.Height > image.Width) { newHeight = 1024; newWidth = (int)(1024.0 * image.Width / image.Height); } else { newWidth = 1024; newHeight = (int)(1024.0 * image.Height / image.Width); } using (var newImage = new Bitmap(image, new Size(newWidth, newHeight))) { newImage.Save(Path.Combine(outputDir.FullName, file.Name), ImageFormat.Jpeg); } } // A more complete example: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Imaging; namespace ConsoleApplication8 { /// <summary> /// http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/a43fe625-a5cd-4438-895f-3ddeec6eb866 /// </summary> class Program { static void Main(string[] args) { var image = Image.FromFile(@"C:\Users\ENOSJ\Downloads\orig.jpg"); foreach (int width in new[] { 100, 200, 300, 400 }) { //var newImage = (Image)image.Clone(); var scale = (decimal)image.Width / image.Height; int newWidth = width; int newHeight = (int)(newWidth / scale); //var thumbnail = newImage.GetThumbnailImage(newWidth, newHeight, () => true, IntPtr.Zero); //newImage.PhysicalDimension.Height = newHeight; var newImage = ResizeImage(image, newWidth, newHeight); SaveJpeg(string.Format(@"C:\temp\thumbnail-{0}-25.jpg", width), newImage, 25); SaveJpeg(string.Format(@"C:\temp\thumbnail-{0}-50.jpg", width), newImage, 50);
SaveJpeg(string.Format(@"C:\temp\thumbnail-{0}-75.jpg", width), newImage, 75);
SaveJpeg(string.Format(@"C:\temp\thumbnail-{0}-100.jpg", width), newImage, 100);
//newImage.Save(@"C:\temp\thumbnail.jpg", ImageFormat.Jpeg);
newImage.Save(string.Format(@"C:\temp\thumbnail-{0}.png", width), ImageFormat.Png);
} } public static System.Drawing.Bitmap ResizeImage(System.Drawing.Image image, int width, int height) { //a holder for the result Bitmap result = new Bitmap(width, height); //use a graphics object to draw the resized image into the bitmap using (Graphics graphics = Graphics.FromImage(result)) { //set the resize quality modes to high quality graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //draw the image into the target bitmap graphics.DrawImage(image, 0, 0, result.Width, result.Height); } //return the resulting bitmap return result; } public static void SaveJpeg(string path, Image image, int quality) { //ensure the quality is within the correct range if ((quality < 0) || (quality > 100)) { //create the error message string error = string.Format("Jpeg image quality must be between 0 and 100, with 100 being the highest quality. A value of {0} was specified.", quality); //throw a helpful exception throw new ArgumentOutOfRangeException(error); } //create an encoder parameter for the image quality EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); //get the jpeg codec ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg"); //create a collection of all parameters that we will pass to the encoder EncoderParameters encoderParams = new EncoderParameters(1); //set the quality parameter for the codec encoderParams.Param[0] = qualityParam; //save the image using the codec and the parameters image.Save(path, jpegCodec, encoderParams); } public static ImageCodecInfo GetEncoderInfo(string mimeType) { //do a case insensitive search for the mime type string lookupKey = mimeType.ToLower(); //the codec to return, default to null ImageCodecInfo foundCodec = null; //if we have the encoder, get it to return if (Encoders.ContainsKey(lookupKey)) { //pull the codec from the lookup foundCodec = Encoders[lookupKey]; } return foundCodec; } /// <summary> /// A quick lookup for getting image encoders /// </summary> private static Dictionary<string, ImageCodecInfo> encoders = null; /// <summary> /// A quick lookup for getting image encoders /// </summary> public static Dictionary<string, ImageCodecInfo> Encoders { //get accessor that creates the dictionary on demand get { //if the quick lookup isn't initialised, initialise it if (encoders == null) { encoders = new Dictionary<string, ImageCodecInfo>(); } //if there are no codecs, try loading them if (encoders.Count == 0) { //get all the codecs foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders()) { //add each codec to the quick lookup encoders.Add(codec.MimeType.ToLower(), codec); } } //return the lookup return encoders; } } } }
Comments
Post a Comment