0

我想知道如何确保 PNG 图像具有良好的可压缩性。请注意,我不是在问如何很好地压缩 PNG 图像(使用 pngcrush 之类的工具),而是如何确保 PNG 中的图像内容更容易压缩。

我的问题与减少大规模图像生成系统中的存储空间需求有关。

该项目将构建和存储用户生成的图像(想像一个头像创建者),因此输出的源片段在我们的控制之下。合成的 PNG 输出文件将在服务器端生成并存储在云存储服务中。

每月生成图像的上限估计数以百万计,因此每个字节都很重要。

在创建将进入合成输出图像以确保良好压缩性的原始片段时,我们是否可以考虑任何事情?

例如……颜色重要吗?源图像数据中是否存在产生较大输出的好颜色渐变和坏颜色渐变?重度抗锯齿是好是坏?是否有有损方法来处理源图像以提高 PNG 可压缩性?

一般来说,首先创建图像时是否有任何字节保存提示?

4

2 回答 2

2

PNG 压缩基于局部(一个像素邻域)预测,然后是 ZLIB 压缩。因此,如果我们正在处理真彩色 (RGB) 图像,您需要很多均匀的区域,最好在水平或垂直方向上,或者非常平滑,这样预测误差就会很小。图像很少有颜色也有帮助,因为这样会重复预测错误(Zlib 会很好地压缩它)。正因为如此,一个简单的方法来预处理 PNG 真彩色图像以保存 PNG 就是将其分色。当然,如果您的颜色真的很少,您可以将其保存为索引(调色板)PNG,这将使图像明显更小,并且之前的考虑(局部平滑度)不那么重要。因此,这个问题很复杂。

重度抗锯齿是好是坏?

抗锯齿与 JPEG 配合得很好,而 PNG 则很难说:它使图像更平滑,但会产生更多颜色。

正如一条评论所说,如果您容忍有损压缩(并且如果您不需要 alpha),您通常会更喜欢 JPEG。

于 2013-05-16T11:29:20.747 回答
1

图像中的许多“独特”区域会增加文件大小。因此,确保更好压缩的一种方法是在图像中有许多相似甚至相同的区域。例如,如果您的图像包含主题,请尝试确保背景为纯白色或黑色。还可以尝试通过合并或模糊来减少图像中的颜色数量,以达到您的应用程序要求可以容忍的程度。希望这可以帮助。

于 2013-05-16T10:44:46.687 回答