嘿,我正在使用一个名为pngquant的程序将24位PNG转换为8位PNG。一切似乎都很正常,我没有注意到图标和其他不包含太多颜色的图像有任何质量下降。现在,当我提供给它一张具有无数颜色的PNG照片时,它会生成一个PNG8,其中我可以看到一些质量损失。
我想通过编程来确定质量损失。我想知道什么时候将PNG24转换为PNG8是安全的。类似于webpagetest.org所做的事情--它们告诉您,如果转换为PNG8格式,此特定图像的大小会更小,并且不会降低质量。
有什么想法吗?
谢谢。
发布于 2011-01-04 17:49:33
这听起来像是一个全引用的image quality assessment问题。
解决此问题的最简单方法是尝试计算PNG24和PNG8图像之间的PSNR。这是对两幅图像之间差异的度量。PSNR越高,图像之间的差异越小。使用颜色量化软件后,检查PSNR是否高于某个阈值(您必须根据经验确定),如果是,则量化是“安全的”。
PSNR有其缺点,即它并不总是与人类视觉系统的工作方式相对应(例如,它忽略了空间和对比度掩蔽现象)。另一个指标SSIM试图解决这个问题,但计算起来稍微困难一些(尽管这里是一个OpenCV implementation )。在我上面描述的阈值方法中,您可以使用SSIM而不是PSNR。
这是你可能会发现有用的another thread。
发布于 2010-12-30 19:55:47
很简单。如果你要从PNG24转换成PNG8的图像有超过256色,你会失去质量。我错过了什么吗?
发布于 2012-01-01 22:46:55
对于pngquant的开发,我使用了my own SSIM工具,因为基于OpenCV的工具似乎不支持伽马校正或alpha通道。
当你运行pngquant -v时,它将输出作为MSE=n引入的误差量(n是均方误差-0是完美质量)。
最新版本有--quality设置,允许您设置最低要求的质量。如果它不能做到这一点,它不会保存文件。
https://stackoverflow.com/questions/4562316
复制相似问题