【问题标题】:Why smaller PNG image takes up more space than the original after getting resized by GraphicsMagic为什么在 GraphicsMagic 调整大小后较小的 PNG 图像比原始图像占用更多空间
【发布时间】:2012-12-10 02:51:20
【问题描述】:

原始PNG图像为800x1200,占用约34K。通过 GraphicsMagick 将图像大小调整为 320x480 大小后,生成的图像占用大约 37K。 (作为比较,如果在 Windows 7 上使用 Paint 调整图像大小,则生成的图像为 40K。)什么给出了?调整图像大小的全部目的是为了节省空间。如何使用 GraphicsMagick 来缩小图片尺寸?

【问题讨论】:

    标签: png image-resizing graphicsmagick


    【解决方案1】:

    PNG 是一种无损格式,通过首先执行一个称为预测的步骤,然后应用 zlib 中使用的相同算法来压缩图像数据。预测步骤是有效压缩文件的关键步骤,它基于较早相邻像素的值。

    所以,假设你有一个黑白的大 PNG(我的意思是只有黑白,有些人有时会用灰度混淆)。还假设它不是一个微小的棋盘图案。在此图像的许多区域中,您将有一个相对较大的白色区域,然后是一个相对较大的黑色区域,依此类推。当预测器在这些大区域之一内时,正确预测当前像素强度与上一个像素强度完全相等是没有问题的。这样可以更轻松地更好地压缩描述图像的数据。

    现在,让我们使用一些不同于最近邻的重采样过滤器(比如说 Lanczos)来缩小这张黑白图像。这很有可能将您的黑白图像变成灰度图像,其强度范围要大得多。这可能会使预测器的工作变得更加困难,因此最终的文件大小可能会更大。

    例如,这是一个黑白 256x256 的 PNG 图像,占用 5440 字节,将其大小(使用 3-lobed Lanczos)调整为 120x120,现在占用 7658 字节,另一个调整大小(使用最近邻)为 120x120,占用2467 字节。

    【讨论】:

    • 太棒了!谢谢你的回答。
    • 顺便说一下,在 GraphicsMagick 中,我相信您在调整大小时会使用过滤器Point,因此它使用最近邻插值。
    【解决方案2】:

    PNG 是一种压缩格式。有时试图压缩一个最大压缩的项目实际上会导致一个更大的项目。因此,如果将 800x1200 调整为更小的尺寸,但结果会保留原始的所有内容,因为原始已经尽可能小,您可能会看到这种情况发生。为了证明这一点,尝试使用 7zip 以超压缩方式压缩一些数据。然后尝试压缩压缩文件。通常第二个压缩文件会比第一个大。

    【讨论】:

    • 感谢您的回答。现在这是有道理的。每个额外的压缩操作只会给原始文件增加一些开销,因为文件已经处于最佳压缩状态。任何后续压缩都需要额外的日期信息,因此需要额外的字节。
    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2012-07-28
    • 2017-12-14
    • 2015-06-28
    相关资源
    最近更新 更多