2013-05-16 26 views
0

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

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

该项目将建立和存储用户生成的图像(认为像一个化身的创造者),所以输出源代码片段在我们的控制之下。合成的PNG输出文件将在服务器端生成并存储在云存储服务中。

每月生成图像的上限估计值为几百万,因此每个字节都会计数。

当创建将会进入复合输出图像以确保良好可压缩性的原始片段时,我们可以考虑哪些东西?

例如...颜色是否重要?在源图像数据中是否存在产生较大输出的好的和不好的颜色渐变?严重的抗锯齿是好还是坏?是否有损耗的方法来处理源图像以改善PNG可压缩性?

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

+1

如果你愿意改变图像,那么为什么不使用有损压缩方法,例如, JPEG?您可以拨打您认为可接受的最高压缩级别。 –

+0

因为我需要输出中的alpha透明度。 – izb

+0

题外话?常见问题解答允许涵盖特定编程问题的问题。他们不需要*源代码。我的问题与减少大规模图像生成系统中的存储空间需求有关。它针对那些可能了解PNG文件格式操作的人。如果这不是一个话题特定的编程问题,那么我不知道是什么。 – izb

回答

2

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

重度抗锯齿好坏?

抗锯齿与JPEG很好地结合在一起,PNG很难说:它使图像更平滑,但它创造出更多的颜色。正如一条评论所述,如果你容忍有损压缩(如果你不需要alpha),你通常更喜欢使用JPEG。

1

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