【问题标题】:C# why resize image will increase the file sizeC#为什么调整图像大小会增加文件大小
【发布时间】:2010-12-28 05:26:27
【问题描述】:

我的图片文件是 6k jpg 文件,宽度:172px,高度:172px。

我使用以下代码尝试将其大小调整为 128*128px jpg 文件:

public static Image ResizeImage(Image img, int width, int height)
    {
        var b = new Bitmap(width, height, PixelFormat.Format24bppRgb);

        using (Graphics g = Graphics.FromImage(b))
        {
            g.DrawImage(img, 0, 0, width, height);
        }

        return b;
    }

这段代码奇怪地将文件大小增加到 50k,谁能解释为什么?以及如何将图像大小调整为 128*128px 并保持大小约为 6k。

非常感谢。

DY

【问题讨论】:

  • 如果省略 g.SmoothingMode = SmoothingMode.AntiAlias,文件大小是多少?
  • 对不起斯图尔特,你是什么意思?
  • @DotNet 用户,你为什么编辑掉g.SmoothingMode = SmoothingMode.AntiAlias 行然后问@Stuart 他的意思?他的问题似乎很清楚。
  • 如果要调整图像大小,还应该设置Graphics.InterpolationMode(如果缩小,最好设置为HighQualityBilinear,如果放大,最好设置为HighQualityBicubic)。否则结果会很丑。
  • 在文本编辑器中打开调整大小的“JPG”图像。我敢打赌,文本将以“BM”开头,这意味着您的图像是 BMP(不是 JPEG,但是,Windows 和某些浏览器会从其内容中检测图像类型并正确呈现)。

标签: c# image-processing


【解决方案1】:

这取决于用于压缩 jpeg 文件的算法。某些算法比其他算法更有损(损失图像质量),但受益于较小的尺寸。

发生的情况是,在代码中,jpeg 在内存中被扩展为位图。当它保存 128x128 jpeg 时,代码使用了一种压缩比用于保存原始图片的算法更少的算法。这导致它生成了一个更大的 jpeg 文件,即使图像本身更小。

【讨论】:

  • 嗨桑托斯克,非常感谢。我为此花了整整一夜。提供一个如何设置的示例?
  • 你能展示你用来将文件保存回 jpeg 的代码吗?
  • 这篇文章展示了如何以编程方式设置 JPEG 压缩级别:msdn.microsoft.com/en-us/library/bb882583.aspx
【解决方案2】:

在发布的代码中,您返回的不是 JPEG 文件,而是位图(128x128 24bpp 未压缩位图的大小为 48kB)。您必须再次压缩它,this tutorial 可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2010-12-02
    • 2014-10-08
    • 1970-01-01
    相关资源
    最近更新 更多