一尘不染

在asp.net中调整图像大小而不丢失图像质量

c#

我正在开发一个ASP.NET 3.5 Web应用程序,该应用程序允许我的用户上传jpeg,gif,bmp或png图像。如果上载的图像尺寸大于103 x
32,则我希望将上载的图像尺寸调整为103 x32。我已经阅读了一些博客文章和文章,还尝试了一些代码示例,但似乎没有任何用处。有没有人成功做到这一点?


阅读 208

收藏
2020-05-19

共1个答案

一尘不染

不久前,我遇到了同样的问题,并以这种方式处理:

private Image RezizeImage(Image img, int maxWidth, int maxHeight)
{
    if(img.Height < maxHeight && img.Width < maxWidth) return img;
    using (img)
    {
        Double xRatio = (double)img.Width / maxWidth;
        Double yRatio = (double)img.Height / maxHeight;
        Double ratio = Math.Max(xRatio, yRatio);
        int nnx = (int)Math.Floor(img.Width / ratio);
        int nny = (int)Math.Floor(img.Height / ratio);
        Bitmap cpy = new Bitmap(nnx, nny, PixelFormat.Format32bppArgb);
        using (Graphics gr = Graphics.FromImage(cpy))
        {
            gr.Clear(Color.Transparent);

            // This is said to give best quality when resizing images
            gr.InterpolationMode = InterpolationMode.HighQualityBicubic;

            gr.DrawImage(img,
                new Rectangle(0, 0, nnx, nny),
                new Rectangle(0, 0, img.Width, img.Height),
                GraphicsUnit.Pixel);
        }
        return cpy;
    }

}

private MemoryStream BytearrayToStream(byte[] arr)
{
    return new MemoryStream(arr, 0, arr.Length);
}

private void HandleImageUpload(byte[] binaryImage)
{
    Image img = RezizeImage(Image.FromStream(BytearrayToStream(binaryImage)), 103, 32);
    img.Save("IMAGELOCATION.png", System.Drawing.Imaging.ImageFormat.Gif);
}

我刚刚读到,这是获得最高质量的方法。

2020-05-19