So I’m in need of some resizing.
I found two different methods.
One looks like this:
public static Byte[] ResizeImageNew(System.Drawing.Image imageFile, int targetWidth, int targetHeight) {
using(imageFile){
Size newSize = CalculateDimensions(imageFile.Size, targetWidth, targetHeight);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppRgb)) {
newImage.SetResolution(imageFile.HorizontalResolution, imageFile.VerticalResolution);
using (Graphics canvas = Graphics.FromImage(newImage)) {
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(imageFile, new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m.GetBuffer();
}
}
}
}
And the other:
public static System.Drawing.Image ResizeImage(System.Drawing.Image originalImage, int width, int maxHeight) {
originalImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
originalImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
int NewHeight = originalImage.Height * width / originalImage.Width;
if (NewHeight > maxHeight) {
// Resize with height instead
width = originalImage.Width * maxHeight / originalImage.Height;
NewHeight = maxHeight;
}
System.Drawing.Image newImage = originalImage.GetThumbnailImage(width, NewHeight, null, IntPtr.Zero);
return newImage;
}
I basically ‘borrowed’ both methods, and just changed bits and pieces.
However – using the first one, whenever I resize to a little smaller picture, the size of the file is actually larger then the original (!?)
And the second while greatly improving size looks terrible :/
I’m of course leaning on merely improving image quality in the first method, if possible, but I can’t see how, everything looks to be ‘high quality’ from my point of view ?
You may have to set the JPEG compression level. Currently it probably saves at a very high quality level, which may not be what you desire.
See here for more info: http://msdn.microsoft.com/en-us/library/bb882583.aspx
Note, however, that just reducing the resolution of the image doesn’t necessarily reduce filesize. Due to how compression works, a smaller resolution file that has been blurred due to interpolation modes can be significantly larger than the original, though with JPEG that’s probably not a big concern due to the lossy algorithm. It can make a huge difference for PNGs, though, if the original file was very simple before (like “flat” webcomic or simple vector graphics) and has been blurred after resizing.