代码之家  ›  专栏  ›  技术社区  ›  Marc Plano-Lesay Laurentiu Amitroaie

RMagick替换透明颜色

  •  1
  • Marc Plano-Lesay Laurentiu Amitroaie  · 技术社区  · 9 年前

    我有一个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)

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

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

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

    我试图添加 PNG32: 在输出文件名前面。如果 识别 输出更改(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 回复  |  直到 9 年前
        1
  •  2
  •   Mark Setchell    9 年前

    这看起来像是您在命令行中成功使用的命令:

    img.quantum_operator(MultiplyQuantumOperator, 0.3, AlphaChannel)
    

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