Kar*_*mar 10 png transparency imagemagick image-processing png-8
我想用ImageMagick将32位png转换为8位png,但半透明像素丢失.如何解决这个问题呢?我正在使用的命令如下
convert original.png PNG8:output.png
Run Code Online (Sandbox Code Playgroud)
Ilm*_*nen 16
显然,即使PNG格式实际上允许8位索引颜色PNG中的任何和所有颜色完全或部分透明,ImageMagick的"PNG8" 格式说明符仅支持GIF样式的1位透明度.
通过不使用说明PNG8:符,可以使用ImageMagick生成索引的8位PNG ,但只需使用-colors 256或-colors 255*来减少图像中的颜色数.不幸的是,至少基于我使用ImageMagick 6.8.9的测试,得到的图像有一些相当奇怪且非常不必要的丑陋颜色量化伪像.
幸运的是,这个特定的工作有一个更好的工具:pngquant.使用它,将32位RGBA PNG转换为8位色彩映射PNG,质量损失最小,就像下面这样简单:
pngquant 256 < original.png > output.png
Run Code Online (Sandbox Code Playgroud)
作为一个快速演示,这里是一个简单的测试图片(一个半透明阴影的星星)使用各种方法转换为8位PNG:
从左到右:
pngquant 256 < input.png > output.pngconvert input.png -colors 255 output.png*量化convert input.png PNG8:output.pngconvert input.png -colors 255 PNG8:output.png*量化*)在下面的评论中,建议-colors 255必须"为'背景'颜色保留一个条目." 根据我的测试,我没有观察到实际情况; 使用-colors 256仍然会产生一个8位色彩映射的PNG,其量化伪像在质量上与输出相似,但细节与输出不同-colors 255.尽管如此,为了安全起见,我已经习惯-colors 255了上面的例子.将色彩图大小减少一种颜色本身不应该显着影响结果的质量,因为测试pngquant 255将证明.