I'm trying to resize user uploaded images to a landscape dimensions e.g. 450w and 250h while maintaining aspect ratio, but to avoid resized images like portrait images having gaps on the side I would like to crop the centre of the image to fill the resized dimensions.
I have found plenty of code to resize images while maintaining aspect ratio but not what I am looking for above, I'm hoping someone can help.
One of the simplest ways to resize an image in the HTML is using the height and width attributes on the img tag. These values specify the height and width of the image element. The values are set in px i.e. CSS pixels. For example, the original image is 640×960.
You should pass needToFill = true:
public static System.Drawing.Image FixedSize(Image image, int Width, int Height, bool needToFill) { #region calculations int sourceWidth = image.Width; int sourceHeight = image.Height; int sourceX = 0; int sourceY = 0; double destX = 0; double destY = 0; double nScale = 0; double nScaleW = 0; double nScaleH = 0; nScaleW = ((double)Width / (double)sourceWidth); nScaleH = ((double)Height / (double)sourceHeight); if (!needToFill) { nScale = Math.Min(nScaleH, nScaleW); } else { nScale = Math.Max(nScaleH, nScaleW); destY = (Height - sourceHeight * nScale) / 2; destX = (Width - sourceWidth * nScale) / 2; } if (nScale > 1) nScale = 1; int destWidth = (int)Math.Round(sourceWidth * nScale); int destHeight = (int)Math.Round(sourceHeight * nScale); #endregion System.Drawing.Bitmap bmPhoto = null; try { bmPhoto = new System.Drawing.Bitmap(destWidth + (int)Math.Round(2 * destX), destHeight + (int)Math.Round(2 * destY)); } catch (Exception ex) { throw new ApplicationException(string.Format("destWidth:{0}, destX:{1}, destHeight:{2}, desxtY:{3}, Width:{4}, Height:{5}", destWidth, destX, destHeight, destY, Width, Height), ex); } using (System.Drawing.Graphics grPhoto = System.Drawing.Graphics.FromImage(bmPhoto)) { grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic; grPhoto.CompositingQuality = CompositingQuality.HighQuality; grPhoto.SmoothingMode = SmoothingMode.HighQuality; Rectangle to = new System.Drawing.Rectangle((int)Math.Round(destX), (int)Math.Round(destY), destWidth, destHeight); Rectangle from = new System.Drawing.Rectangle(sourceX, sourceY, sourceWidth, sourceHeight); //Console.WriteLine("From: " + from.ToString()); //Console.WriteLine("To: " + to.ToString()); grPhoto.DrawImage(image, to, from, System.Drawing.GraphicsUnit.Pixel); return bmPhoto; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With