为什么使用GraphicsMagic调整大小后,较小的PNG图像占用的空间比原始图像更多?

8

原始的PNG图像大小为800x1200,大约占用34K的空间。将该图片使用GraphicsMagick调整大小为320x480后,生成的图片大约占用37K的空间。(相比之下,如果在Windows 7上使用Paint调整大小,则生成的图片为40K)。这是怎么回事?调整图片大小的目的本来就是为了节省空间。应该如何使用GraphicsMagick来缩小图片尺寸呢?

2个回答

12
PNG是一种无损格式,通过首先执行称为预测的步骤,然后应用zlib中使用的相同算法来压缩图像数据。预测步骤是有效压缩文件的关键步骤,并且基于先前邻居像素的值。
因此,假设您有一个大的黑白PNG(我的意思是只有黑色和白色,有些人有时会将其与灰度混淆)。还假设它不是一个微小的棋盘格模式。在这个图像的许多区域中,您将拥有一个相对较大的白色区域,然后是一个相对较大的黑色区域,依此类推。当预测器位于其中一个这些大区域内部时,它没有问题地正确预测当前像素强度与上一个像素强度完全相等。这使得更容易更好地压缩描述您的图像的数据。
现在,让我们使用一些不同于最近邻居的重采样滤镜(比如Lanczos)缩小这个黑白图像。这很可能会将您的黑白图像变成灰度图像,其强度范围要大得多。这可能会使预测器的工作更加困难,因此最终文件大小可能会更大。
例如,这里有一张256x256的黑白PNG图片,大小为5440字节,将其调整大小(使用3-lobed Lanczos)到120x120后,大小变为7658字节,再次调整大小(使用最近邻)到120x120后,大小为2467字节。

enter image description here enter image description here enter image description here


顺便说一下,在GraphicsMagick中,我相信你会在调整大小时使用Point滤镜,这样它就会使用最近邻插值。 - mmgp

3

PNG是一种压缩格式。有时候试图压缩已经被最大程度压缩的项目实际上会导致更大的项目。因此,如果将800x1200调整为较小的大小,但结果保留了原始文件中的所有内容,因为原始文件已经尽可能地简化,你可能会看到这种情况发生。为了证明这一点,请尝试使用7zip对某些数据进行超级压缩。然后尝试压缩已压缩的文件。通常第二个压缩的文件会比第一个更大。


谢谢你的回答。现在我明白了。每次额外的压缩操作只会给原始文件增加一些开销,因为文件已经处于最佳压缩状态。任何后续的压缩都需要更多的数据信息,因此会增加额外的字节数。 - Mohammed Joraid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接