This method will save the image cropped in the center, if necessary:
bool SaveCroppedImage(Image image, int targetWidth, int targetHeight, string filePath) { ImageCodecInfo jpgInfo = ImageCodecInfo.GetImageEncoders().Where(codecInfo => codecInfo.MimeType == "image/jpeg").First(); Image finalImage = image; System.Drawing.Bitmap bitmap = null; try { int left = 0; int top = 0; int srcWidth = targetWidth; int srcHeight = targetHeight; bitmap = new System.Drawing.Bitmap(targetWidth, targetHeight); double croppedHeightToWidth = (double)targetHeight / targetWidth; double croppedWidthToHeight = (double)targetWidth / targetHeight; if (image.Width > image.Height) { srcWidth = (int)(Math.Round(image.Height * croppedWidthToHeight)); if (srcWidth < image.Width) { srcHeight = image.Height; left = (image.Width - srcWidth) / 2; } else { srcHeight = (int)Math.Round(image.Height * ((double)image.Width / srcWidth)); srcWidth = image.Width; top = (image.Height - srcHeight) / 2; } } else { srcHeight = (int)(Math.Round(image.Width * croppedHeightToWidth)); if (srcHeight < image.Height) { srcWidth = image.Width; top = (image.Height - srcHeight) / 2; } else { srcWidth = (int)Math.Round(image.Width * ((double)image.Height / srcHeight)); srcHeight = image.Height; left = (image.Width - srcWidth) / 2; } } using (Graphics g = Graphics.FromImage(bitmap)) { g.SmoothingMode = SmoothingMode.HighQuality; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.CompositingQuality = CompositingQuality.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(image, new Rectangle(0, 0, bitmap.Width, bitmap.Height), new Rectangle(left, top, srcWidth, srcHeight), GraphicsUnit.Pixel); } finalImage = bitmap; } catch { } try { using (EncoderParameters encParams = new EncoderParameters(1)) { encParams.Param[0] = new EncoderParameter(Encoder.Quality, (long)100);
source share