如何确定PNG24转换为PNG8的时间是无损的?

时间:2010-12-30 11:44:19

标签: optimization image-processing png

嘿,我正在使用一个名为pngquant的程序将24位PNG转换为8位PNG。一切似乎都很好,我没有注意到图标和其他不含太多颜色的图像质量下降。现在,当我用数以万计的颜色喂它一张PNG照片时,它会产生一个PNG8,在那里我可以看到一些质量损失。

我想以编程方式确定质量损失。我想知道何时将PNG24转换为PNG8是否安全。有关webpagetest.org的作用 - 他们会告诉您,如果转换为PNG8,此特定图片的尺寸会更小,并且质量不会下降。

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:3)

这听起来像是一个完整的参考image quality assessment问题。

最简单的方法是尝试计算PNG24和PNG8图像之间的PSNR。这是两个图像之间差异的度量。 PSNR越高,图像的差异越小。使用颜色量化软件后,检查PSNR是否高于某个阈值(您必须根据经验确定),如果是,则量化是“安全的”。

PSNR有其缺点,即它并不总是与人类视觉系统的工作方式相对应(例如,它忽略了空间和对比度掩蔽的现象)。另一个度量标准SSIM尝试处理该问题,但计算起来稍微困难一些(尽管这是一个OpenCV implementation)。您可以在我上面描述的阈值方法中使用SSIM而不是PSNR。

这里有another thread你可能会觉得有用。

答案 1 :(得分:2)

非常简单。如果您从PNG24转换为PNG8的图像有256种以上的颜色,那么您的质量会下降。我错过了什么吗?

答案 2 :(得分:0)

对于pngquant的开发我使用my own SSIM工具,因为基于OpenCV的工具似乎不支持伽马校正和alpha通道。

当您运行pngquant -v时,它会输出引入的错误数量MSE=nn是均方误差 - 0是完美品质)。

最新版本具有--quality设置,可让您设置最低要求质量。如果无法实现,则不会保存文件。