图像合成

时间:2011-04-04 16:40:54

标签: python image composite cairo

我有一些音乐乐队的专辑标题。我想用一些将围绕图像角落的面具绘制它。 所以,我在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。我在this page找到的简单示例。

但是,当我在cairo中设置合成运算符时,我的程序中的一切都消失了:(。当我评论该行时,一切都没问题,但是掩码在我的图像上。正确的方法是什么?

P.S。我正在使用python2,cairo库


当我删除合成操作符时,我看到(不要忘记真正的蒙版是白色的,在这种情况下专辑图像是暗的):

enter image description here

1 个答案:

答案 0 :(得分:8)

您还需要共享表面创建代码,这里是我从您的示例中扩展的一些代码:

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