RMagick:在已经具有透明元素的png上设置不透明度

时间:2011-07-24 01:19:57

标签: ruby rmagick

我需要在rmagick中构图。如果我在另一个图像上放置一个具有透明区域的png,并将该png的不透明度设置为50%,那么透明变为白色的部分(具有50%不透明度)。但我希望这些地区保持透明。

这是我的代码:

canvas = Magick::Image.new(1024,768)
canvas.opacity = Magick::MaxRGB
image = Magick::ImageList.new('/tmp/trans.png').first
image.background_color = "none"
image.opacity = Magick::MaxRGB/2
canvas.composite!(image, 50, 50, Magick::OverCompositeOp)
canvas.write('/tmp/composite.png')

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

经过8个小时的谷歌搜索后,我发现了这篇文章,让我得出了答案 http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=19169

convert FileIn.png -channel a -evaluate Multiply 0.5 +channel FileOut.png

-channel a强制选择alpha通道
-evaluate Multiply 0.5修改图像的透明度
+通道更改选择以包括输出中的所有通道

然后合并两个透明的png,最后得到第三个透明的png (请注意我使用GraphicsMagick进行此操作而不是ImageMagick)

gm convert FileIn1.png FileIn2.png -background transparent -mosaic FileOut.png