RMagick: установка непрозрачности для png, в котором уже есть прозрачные элементы

Мне нужно составить изображения в 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')

Какие-либо предложения?


person RickP    schedule 24.07.2011    source источник


Ответы (1)


После 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 принудительно выбирает альфа-канал
-evaluate Multiply 0.5 изменяет прозрачность изображения
+channel изменяет выбор, чтобы включить все каналы в вывод

А затем объединить два прозрачных png и получить третий прозрачный png
(обратите внимание, что для этой операции я использую GraphicsMagick вместо ImageMagick)

gm convert FileIn1.png FileIn2.png -background transparent -mosaic FileOut.png
person Ryan Williams    schedule 30.04.2012