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

Ruby 如何使用ChunkyPNG或RMagick保存8位PNG,ruby,png,rmagick,png-8,Ruby,Png,Rmagick,Png 8,我一直在尝试使用RMagick()和ChunkyPNG()保存8位png(PNG8),但一直无法做到这一点 然而,我唯一能让它在RMagick上工作的时间是如果ImageMagick安装是基于QuantumDepth 8而不是通常的16。无法动态更改此设置-必须使用此设置编译ImageMagick的安装。 创建图像时将深度设置为8或保存时为格式类型添加前缀也没有效果 例如,img.write('PNG8:image.png') 无论如何,我已经看过ChunkyPNG,我真的更喜欢使用它而不是RM

我一直在尝试使用RMagick()和ChunkyPNG()保存8位png(PNG8),但一直无法做到这一点

然而,我唯一能让它在RMagick上工作的时间是如果ImageMagick安装是基于QuantumDepth 8而不是通常的16。无法动态更改此设置-必须使用此设置编译ImageMagick的安装。 创建图像时将深度设置为8或保存时为格式类型添加前缀也没有效果

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

无论如何,我已经看过ChunkyPNG,我真的更喜欢使用它而不是RMagick——因为它是纯Ruby,不依赖ImageMagick。我也不能用它来保存PNG8

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

我的问题是:

  • 有没有一种方法可以像安装ImageMagick Q16的机器上的ImageMagick Q8那样正确保存8位PNG

  • 有人能提供我自己用ChunkyPNG做4位编码器的指针吗,或者知道用它保存PNG8的方法吗


  • 提前感谢..

    您所说的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)
    

    更多信息:

    请原谅我说得不清楚。我想根据你的描述,它应该是8位索引颜色。我正在用代码创建一个新图像,并以尽可能最小的PNG格式保存它。'img.save(“public/image.PNG”,:color_mode=>ChunkyPNG::color_index,:bit_depth=>8”)给了我一个例外:“ChunkyPNG::ExpectationFailed at/这个调色板有太多颜色!*文件:png_encoding.rb*位置:encode_png_pixelstream*行:157'可以通过GIMP将图像转换为索引png,并可用于我的目的。8位索引颜色模式最多支持256种颜色(2^8)。您需要减少图像中的颜色数量,以使PNG8正常工作。如果你使用256色或更少的颜色,ChunkyPNG将自动选择索引颜色模式。在你回复之前-我意识到我在做什么,这是错误的。你是对的-调色板太大了。这是一个很难找到答案的方法。谢谢你的帮助和耐心。看来ChunkyPNG赢了RMagick!