【问题标题】:How to save 8-bit PNGs with ChunkyPNG or RMagick如何使用 ChunkyPNG 或 RMagick 保存 8 位 PNG
【发布时间】:2011-09-24 04:10:24
【问题描述】:

我一直在尝试使用 RMagick (http://rmagick.rubyforge.org/) 和 ChunkyPNG (https://github.com/wvanbergen/chunky_png) 保存 8 位 PNG (PNG8),但一直无法做到。

但是,我唯一可以让它在 RMagick 上工作的情况是 ImageMagick 安装基于 8 的 QuantumDepth 而不是通常的 16。不可能动态更改此设置 - ImageMagick 的安装有使用此设置进行编译。 同样在创建图像时将深度设置为 8 或在保存时为格式类型添加前缀无效。

即。 img.write('PNG8:image.png')

无论如何,我已经看过 ChunkyPNG,我真的更喜欢使用它而不是 RMagick - 仅仅是因为它是纯 Ruby 并且不依赖于 ImageMagick。我也无法使用它保存 PNG8。

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

我的问题:

  1. 有没有办法像在 ImageMagick Q8 上一样在安装了 ImageMagick Q16 的机器上正确保存 8 位 PNG?

  2. 谁能提供我自己在 ChunkyPNG 中的 4 位编码器的指示,或者知道用它保存 PNG8 的方法吗?

提前谢谢..

【问题讨论】:

    标签: ruby png rmagick png-8


    【解决方案1】:

    PNG8 到底是什么意思? 8 位灰度、8 位索引颜色、3x8 位 RGB 还是 4x8 位 RGBA? ChunkyPNG 支持所有这些颜色模式。

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

    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 格式..
    • 'img.save("public/image.png", :color_mode => ChunkyPNG::COLOR_INDEXED, :bit_depth => 8)' 给了我这个例外:'ChunkyPNG::ExpectationFailed at /这个调色板的颜色太多了! * 文件:png_encoding.rb * 位置:encode_png_pixelstream * 行:157 ' 通过 GIMP 将图像转换为索引 PNG 是可能的,并且适用于我的目的。
    • 8 位索引颜色模式最多仅支持 256 种颜色 (2^8)。您需要减少图像中的颜色数量才能使 PNG8 正常工作。如果您使用 256 或更少的颜色,ChunkyPNG 将自动选择索引颜色模式。
    • 在您回复之前 - 我意识到我在做什么,这是错误的。你是对的 - 调色板太大了。很任性的找出方法。感谢您的帮助和耐心。看起来 ChunkyPNG 已经战胜了 RMagick!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2014-07-27
    • 2011-09-19
    • 2010-10-17
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多