使用c#裁剪图像或缩小图像

时间:2017-02-22 13:22:17

标签: c# image

我想在c#中动态裁剪图像。

我已经提到了一些链接并实现如下。

参考:

但我得到了低质量的图像。我看过网站他们正在他们的服务器上传图像并缩小网站而不会失去质量

他们是怎么做到的?为什么我们不能在c#中做?

CODE

 public static Image ScaleImage(Image image, int width, int height)
        {
            if (image.Height < height && image.Width < width) return image;
            using (image)
            {
                double xRatio = (double)image.Width / width;
                double yRatio = (double)image.Height / height;
                double ratio = Math.Max(xRatio, yRatio);
                int nnx = (int)Math.Floor(image.Width / xRatio);
                int nny = (int)Math.Floor(image.Height / yRatio);
                Bitmap resizedImage = new Bitmap(nnx, nny, PixelFormat.Format64bppArgb);
                using (Graphics graphics = Graphics.FromImage(resizedImage))
                {
                    graphics.Clear(Color.Transparent);

                    // This is said to give best quality when resizing images
                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    graphics.SmoothingMode = SmoothingMode.HighQuality;
                    graphics.CompositingQuality = CompositingQuality.HighQuality;
                    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

                    graphics.DrawImage(image,
                       new Rectangle(0, 0, nnx, nny),
                       new Rectangle(0, 0, image.Width, image.Height),
                       GraphicsUnit.Pixel);
                }
                return resizedImage;
            }
        }

3 个答案:

答案 0 :(得分:0)

你可以使用imagemagic。它有自己的dll与VS一起工作。它还有很棒的论坛,你可以找到各种各样的例子。我用它制作了一个程序。它花了我大约半个小时(不是一个很大的应用程序,它只用于商业公司制作大量裁剪的大小调整的图片(大约4 TB的图片大声笑))。 在这里你可以找到一些例子。

https://www.imagemagick.org/script/index.php

答案 1 :(得分:0)

ImageMagick绝对是一个可行的解决方案,因此GraphicsMagick或libvips(虽然我不确定libvips是否具有C#特定绑定,但它是a lot faster than IM or GM)。

您可能还想尝试使用ImageKit或其他类似的全功能第三方图片优化和投放解决方案,为您完成所有这些调整大小。

答案 2 :(得分:0)

您可以尝试使用net-vips的C#绑定libvips。这是一个延迟的,流式的,由需求驱动的图像处理库,因此它可以执行此类操作,而无需加载整个图像。

例如,它带有一个方便的图像缩略图:

Image image = Image.Thumbnail("image.jpg", 300, 300);
image.WriteToFile("my-thumbnail.jpg");