Композитинг изображений - PullRequest
7 голосов
/ 04 апреля 2011

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

enter image description here

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

# 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. Быстрые примеры, которые я нашел на этой странице .

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

p.s. Я использую Python2, Каирская библиотека


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

enter image description here

1 Ответ

8 голосов
/ 12 апреля 2011

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

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 ниже (это было единственное изображение на моем рабочем столе на данный момент;) enter image description here

...