【问题标题】:RMagick replacing transparent colorRMagick 替换透明色
【发布时间】: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


【解决方案1】:

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

img.quantum_operator(MultiplyQuantumOperator, 0.3, AlphaChannel)

为了将来参考,我找到了here

【讨论】:

  • 不确定这到底是做什么的,因为我对图像处理不太了解。马克,你能看看这个问题吗?感谢您的帮助!我只是被卡住了,我不确定发生了什么。 stackoverflow.com/questions/39576629/…
猜你喜欢
  • 2015-04-25
  • 2012-05-02
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
相关资源
最近更新 更多