【发布时间】:2015-03-26 07:17:00
【问题描述】:
我有一个 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-bit 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
但我最终得到了完全相同的结果。
知道如何避免这种黑色背景吗?
【问题讨论】:
-
我通常将 IM 与命令行和/或 Perl 或 PHP 绑定一起使用,但不是 RMagick...但是,您可能会发现不透明度的比例是 0..1 而不是 0.. 65535。我可能错了——只是想帮忙。
-
感谢您的尝试。但我也尝试使用 0.3:我有一个纯黑色背景和一个纯白色图标。我想它在这里不允许浮点数,并向下舍入到 0(或到 1,但我并没有真正注意到差异:-))。由于我的背景产生了 30% 的黑色,我猜这里的范围很好。
-
另一种想法可能是在更改不透明度之前将背景颜色设置为
none。 -
我刚试过,没有变化。
-
img.quantum_operator(MultiplyQuantumOperator, 0.3, AlphaChannel)也许?
标签: ruby image imagemagick png rmagick