2

嗨,伙计们,我正在用 C# 调整图像的大小并将它们保存为 .png。

public static Bitmap resize(int x, int y, Image p)
{
    Bitmap Img = new Bitmap(x,y);
    using (Graphics gr = Graphics.FromImage(Img))
    {
        gr.SmoothingMode = SmoothingMode.HighQuality;
        gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
        gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
        gr.DrawImage(p, new Rectangle(0, 0, x, y));
    }
    return Img;
}

问题是,当用户上传高质量图像时,例如来自高端智能手机(如 Galaxy、iphone 等)的图像,生成的调整大小图像的文件大小非常高。我已经构建了一个调整大小的图像文件大小和像素大小的表。

1) Img1  1280 * 666px => 458 kb
2) Img1  300 * 399px => 221kb
3) Img2  1280 * 1444px => 2.08mb
4) Img2  300 * 451px => 327kb

我知道我已将插值和平滑设置为高质量,例如将图像保存为 .png 以保持透明度。但是我应该更改什么设置才能获得适合 HTML 页面的合理质量和文件大小的图像。我的最终目标是在图像质量和文件大小之间做出妥协。因此,请指向一些链接,展示 Filsesize 与质量比较调整大小图像的质量,以便我自己做出选择。

4

2 回答 2

3

您可以使用一个选项,即PixelFormat.

using (Bitmap bmp = new Bitmap(x, y, 
         System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
    using (Graphics gr = Graphics.FromImage(bmp))
    {

        gr.SmoothingMode = SmoothingMode.HighQuality;
        gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
        gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
        gr.DrawImage(src, new Rectangle(0, 0, x, y));
    }
}

仅当您需要 Alpha 通道(例如图像是透明的)时才使用 32 位 Argb。您还可以查询img.PixelFormat图像以查看图像是否甚至包含 Alpha 通道!在这种情况下,您不必将其保存为 PNG,可以使用 JPG,这将导致文件更小!

普通 jpg 通常使用Format24bppRgb.

于 2013-09-24T17:14:30.373 回答
1

改用 JPEG 并调整压缩以获得所需的质量。

于 2013-09-24T17:15:57.677 回答