RMagick取代透明色

时间:2015-01-27 15:49:26

标签: ruby image imagemagick png rmagick

我有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位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

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

我怎么能避免这种黑色背景?

1 个答案:

答案 0 :(得分:2)

这看起来像是命令行中最成功的命令:

img.quantum_operator(MultiplyQuantumOperator, 0.3, AlphaChannel)

为了将来参考,我发现它here