我想知道如何确保PNG图像的良好压缩性。请注意,我不是要求如何很好地压缩PNG图像(使用像pngcrush这样的工具),而是如何确保PNG中的图像内容更容易压缩。
我的问题与减少大规模图像生成系统中的存储空间需求有关。
该项目将构建和存储用户生成的图像(想象一下像化身创建者一样),因此输出的源片段在我们的控制之下。合成的PNG输出文件将在服务器端生成并存储在云存储服务中。
每月生成图像的上限估计为数百万,因此每个字节都很重要。
在创建将进入复合输出图像的原始碎片时,我们可以考虑哪些事项以确保良好的压缩性?
例如......颜色重要吗?源图像数据中是否有好的和坏的颜色渐变产生更大的输出?重抗性是好还是坏?有没有办法处理源图像以提高PNG压缩率?
通常,在创建图像时是否有任何字节保存技巧?
答案 0 :(得分:2)
PNG压缩基于本地(一个像素邻域)预测,然后是ZLIB压缩。因此,如果我们处理真彩色(RGB)图像,您需要大量均匀区域,最好是水平或垂直方向,或非常平滑,以便预测误差很小。它还有助于图像具有很少的颜色,因为预测错误将重复(并且Zlib将很好地压缩)。 因此,为PNG保存预处理PNG真彩色图像的简单方法是 posterizing 它。 当然,如果您的颜色非常少,您可以选择将其保存为索引(调色板)PNG,这将使图像显着变小,并且之前的考虑因素(局部平滑度)更重要。 因此,问题很复杂。
重抗性是好还是坏?
Antialiasing可以很好地与JPEG配合使用,因为PNG很难说:它使图像更平滑,但会产生更多颜色。
正如一条评论所述,如果你容忍有损压缩(如果你不需要alpha),你通常会更喜欢JPEG。
答案 1 :(得分:1)
图像中的许多“独特”区域会增加文件大小。因此,确保更好压缩的一种方法是在图像中具有相似或甚至相同的许多区域。例如,如果您的图像包含主题,请尝试确保背景为纯白色或黑色。还可以尝试通过分级或模糊来减少图像中的颜色数量,达到应用程序要求可以容忍的程度。希望这会有所帮助。