2011-07-24 81 views
0

我需要在rmagick中構圖。如果我在另一個圖像上放置了一個透明區域的png,並將該png的不透明度設置爲透明變爲白色(具有50%不透明度)的部分爲50%。但我希望這些地區保持透明。RMagick:在已有透明元素的PNG上設置不透明度

這裏是我的代碼:

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') 

有什麼建議?

回答

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 

聲道一個力阿爾法信道的選擇
-evaluate乘0.5修改圖像的透明度
+信道改變選擇爲包括在輸出所有的通道

然後合併兩個透明png,最後得到第三個透明PNG
(請注意我正在使用GraphicsMagick進行此操作而不是ImageMagick)

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