2011-04-04 29 views
6

Tengo el título de un álbum de una banda de música. Quiero dibujarlo con una máscara que rodeará las esquinas de la imagen. lo tanto, me he preparado como máscara en GIMP:Composición de imágenes

enter image description here

estoy usando máscara blanca, pero es invisible en el fondo blanco aquí. lo tanto, aquí es el código de la prestación:

# 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() 

Como se puede ver, he utilizado OPERATOR_DEST_IN. Ejemplos rápidos que encontré en this page.

Pero, todo desapareció en mi programa cuando me puse operador de composición en El Cairo :(. Cuando comento esa línea todo está bien, pero máscara está por encima de mi imagen. ¿Cuál es el camino correcto para eso?

ps estoy usando python2, biblioteca Cairo


Cuando quito el operador de composición veo (no se olvide que la máscara real es blanco, en este caso es la imagen del álbum oscuro):

enter image description here

Respuesta

7

Necesita compartir el código de creación de superficies, así, aquí hay un código que se extendía desde tu ejemplo:

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 

que generó esta hermosa png a continuación (que era la única imagen en mi escritorio en el momento;) enter image description here

+0

Gracias amigo! Funciona;) – Ockonal

+0

np;) Supongo que su superficie no era ARGB. – Ralphleon

+0

Gracias por esto; me salvaste un montón de tiempo –