Композиция изображений

У меня есть название альбома какой-то музыкальной группы. Я хочу нарисовать его с помощью маски, которая будет закруглять углы изображения. Итак, я приготовил такую ​​маску в GIMP:

введите здесь описание изображения

Я использую белую маску, но здесь она невидима на белом фоне. Итак, вот код рендеринга:

# Draw album image
img = cairo.ImageSurface.create_from_png('images/album.png')
ctx.set_source_surface(img, posX, posY)
ctx.paint()

# Draw mask
ctx.set_operator(cairo.OPERATOR_DEST_IN)
img = cairo.ImageSurface.create_from_png('images/mask.png')
ctx.set_source_surface(img, posX, posY)
ctx.paint()

Как видите, я использовал OPERATOR_DEST_IN. Краткие примеры я нашел на этой странице.

Но в моей программе все исчезло, когда я установил оператор композитинга в cairo :(. Когда я комментирую эту строку, все в порядке, но маска находится поверх моего изображения. Как правильно это сделать?

p.s. Я использую python2, библиотеку cairo.


Когда я удаляю оператор композитинга, я вижу (не забывайте, что реальная маска белая, в этом случае изображение альбома темное):

введите здесь описание изображения


person Max Frai    schedule 04.04.2011    source источник


Ответы (1)


Вам также нужно поделиться своим кодом создания поверхности, вот код, который я расширил из вашего примера:

import cairo

surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, 128, 128)
ctx = cairo.Context (surface)

posX = posY = 0

img = cairo.ImageSurface.create_from_png('sample.png')  
ctx.set_source_surface(img, posX, posY)  
ctx.paint()

# Draw mask
ctx.set_operator(cairo.OPERATOR_DEST_IN)
img = cairo.ImageSurface.create_from_png('mask.png')
ctx.set_source_surface(img, posX, posY)
ctx.paint()

surface.write_to_png ("example.png") # Output to PNG

Который сгенерировал этот красивый png ниже (в данный момент это было единственное изображение на моем рабочем столе;)введите описание изображения здесь

person Ralphleon    schedule 11.04.2011
comment
np;) Я предполагаю, что ваша поверхность не была ARGB. - person Ralphleon; 12.04.2011
comment
Спасибо за это; ты сэкономил мне кучу времени. - person Mitch Haile; 10.10.2012