图像合成
我有一个音乐乐队的专辑标题。我想用一个遮罩来绘制它,这个遮罩会让图片的角变圆。
所以,我在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中设置合成操作符时,我的程序里的所有东西都消失了 :(. 当我把那行代码注释掉时,一切都正常,但遮罩覆盖在我的图片上。那该怎么做才对呢?
附注:我使用的是python2和cairo库。
当我去掉合成操作符时,我看到的效果是(别忘了,真实的遮罩是白色的,而这个专辑图片是黑色的):
1 个回答
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图片(当时它是我桌面上唯一的图片;)