C# crop image from center

前端 未结 6 1698
我寻月下人不归
我寻月下人不归 2020-12-09 13:48

I am developing application using .NET(4.5) MVC(4.0) C#(5.0). i want to generate image thumbnail from image that i already have. Now requirement is like it should generate t

6条回答
  •  情歌与酒
    2020-12-09 14:46

    Try this:

    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);
                //quality should be in the range [0..100] .. 100 for max, 0 for min (0 best compression)
                finalImage.Save(filePath, jpgInfo, encParams);
                return true;
            }
        }
        catch { }
        if (bitmap != null)
        {
            bitmap.Dispose();
        }
        return false;
    }
    

提交回复
热议问题