如何使用ChunkyPNG或RMagick保存8位PNG图像

4
我一直试图使用RMagick(http://rmagick.rubyforge.org/)和ChunkyPNG(https://github.com/wvanbergen/chunky_png)保存8位PNGs(PNG8),但一直无法成功。

然而,我只有在ImageMagick的安装基于QuantumDepth 8而不是通常的16时才能让RMagick正常工作。无法在运行时更改此设置 - 必须使用此设置编译ImageMagick的安装程序。 在创建图像时设置深度为8或在保存时添加格式类型前缀都没有效果。

例如:img.write('PNG8:image.png')

总之,我看了看ChunkyPNG,我真的更喜欢使用它而不是RMagick - 简单地因为它是纯Ruby并且不依赖于ImageMagick。但是我也不能使用它来保存PNG8。

我必须使用图形程序将PNG转换为8位 -

我的问题:

  1. 是否有一种正确的方法可以像ImageMagick Q8上那样在安装了ImageMagick Q16的计算机上正确保存8位PNGs?

  2. 任何人都能提供指针,告诉我如何在ChunkyPNG中制作自己的4位编码器,或者知道一种保存PNG8的方法吗?

提前感谢。

1个回答

5

PNG8的确切含义是什么?是8位灰度,8位索引色,3x8位RGB或4x8位RGBA?这些颜色模式都受ChunkyPNG支持。

默认情况下,ChunkyPNG尝试确定最适合保存您图像的颜色模式。您可以通过向保存方法提供选项哈希来覆盖它:

image.save('filename.png', color_mode: ChunkyPNG::COLOR_TRUECOLOR)
# Or: ChunkyPNG::COLOR_TRUECOLOR_ALPHA    

image.to_blob(color_mode: ChunkyPNG::COLOR_INDEXED, bit_depth: 8)

更多信息: https://github.com/wvanbergen/chunky_png/wiki

请原谅我表述不够清晰。从您的描述中,我认为这将是8位索引色彩。 我正在代码中创建一个新图像,并以最小的PNG格式保存它。 - anami
img.save("public/image.png", :color_mode => ChunkyPNG::COLOR_INDEXED, :bit_depth => 8) 引发了以下异常:'ChunkyPNG::ExpectationFailed at / This palette has too many colors!* file: png_encoding.rb * location: encode_png_pixelstream * line: 157'通过 GIMP 将图像转换为索引 PNG 是可行的,并且符合我的目的。 - anami
8位索引色模式仅支持最多256种颜色(2^8)。您需要减少图像中的颜色数量以使PNG8正常工作。如果您使用256种或更少的颜色,ChunkyPNG将自动选择索引色模式。 - wvanbergen
在您回复之前 - 我意识到我所做的是错误的。您是正确的 - 调色板太大了。这是一种相当偏离正道的发现方式。感谢您的帮助和耐心。 看起来ChunkyPNG已经胜过RMagick了! - anami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接