RMagick 替换透明色

RMagick replacing transparent color

我有一张 PNG 图片(PNG 96x96 96x96+0+0 8 位 RGB 2.05KB 0.000u 0:00.000)。它是一个图标,具有完全透明的背景和一个白色符号(它的边框是从透明到全白的渐变)。我想将整个图标的不透明度降低到其初始值的 30%。使用 convert,我可以这样做:

convert input.png -channel a -evaluate Multiply 0.3 +channel output.png

identify 为生成的图像提供相同的输出。但是,我想通过 Ruby 脚本执行此操作,因此我使用的是 RMagick。

这里有一个小测试:

source = Magick::Image::read(INPUT)[0]
source.write(OUTPUT)

有效:我有完全相同的图像。 identify 的输出仍然相同。现在,让我们更改不透明度:

source = Magick::Image::read(INPUT)[0]
source.opacity = (Magick::QuantumRange * 0.3).floor
source.write(OUTPUT)

结果错误:在降低不透明度之前添加了黑色背景。我最终得到了一个 30% 不透明度的黑色背景和一个 30% 不透明度的白色图标(对于图标来说,这是我想要的)。这是 identify 输出:PNG 96x96 96x96+0+0 8 位 RGB 1.06KB 0.000u 0:00.000

我尝试在输出文件名前添加 PNG32:。如果 identify 输出改变 (PNG 96x96 96x96+0+0 8-bit sRGB 1.29KB 0.000u 0:00.000),视觉结果保持不变。

我尝试指定背景颜色:

source = Magick::Image::read(INPUT)[0]
source.opacity = (Magick::QuantumRange * 0.3).floor
source.write(OUTPUT) do
  self.background_color = 'none'
end

但我得到了完全相同的结果。

知道如何避免这种黑色背景吗?

这看起来是与您在命令行中成功使用的命令最相似的命令:

img.quantum_operator(MultiplyQuantumOperator, 0.3, AlphaChannel)

为了以后参考,我找到了它 here