2011-09-22 27 views
17

He estado golpeando mi cabeza contra la pared por un tiempo con esto, así que tal vez alguien por ahí puede ayudar.Transparente PNG en PIL resulta no ser transparente

Estoy usando PIL para abrir un PNG con fondo transparente y algunos garabatos negros al azar, y tratando de ponerlo encima de otro PNG (sin transparencia), y luego guardarlo en un tercer archivo.

Sale completamente negro al final, lo cual es irritante, porque no dije que fuera negro.

He probado esto con varias correcciones propuestas de otras publicaciones. La imagen se abre en formato RGBA, y todavía está en mal estado.

Además, este programa se supone que trata con todo tipo de formatos de archivo, por lo que estoy usando PIL. Es irónico que el primer formato que probé esté mal.

Cualquier ayuda sería apreciada. Aquí está el código:

from PIL import Image 
img = Image.open(basefile) 
layer = Image.open(layerfile) # this file is the transparent one 
print layer.mode # RGBA 
img.paste(layer, (xoff, yoff)) # xoff and yoff are 0 in my tests 
img.save(outfile) 
+0

duplicado Posible de http://stackoverflow.com/questions/5324647/how-to-merge-a-transparent-png-image-with-another- image-using-pil –

Respuesta

30

Creo que lo que quiere usar es el argumento pegar máscara. ver la docs, (desplácese hacia abajo para paste)

from PIL import Image 
img = Image.open(basefile) 
layer = Image.open(layerfile) # this file is the transparent one 
print layer.mode # RGBA 
img.paste(layer, (xoff, yoff), mask=layer) 
# the transparancy layer will be used as the mask 
img.save(outfile) 
+3

¡Bravo! La documentación de PIL no estaba clara sobre qué era la máscara: primero pensé que era un número (porque decían algo así como 'si la máscara es 0, si la máscara es 255'), entonces pensé que era como la caja argumento, pero en su lugar se utilizó para determinar qué parte del argumento de la imagen se copiaría. Ahora tiene más sentido, gracias! – MarkTraceur

+0

Me has ayudado mucho. Gracias – imkost

+8

oh, ¿por qué demonios no haría esto por defecto ... – Claudiu

Cuestiones relacionadas