Tkinter transparencia de imagen

Así que tengo 2 imágenes que me gustaría mostrar una encima de la otra. La imagen en la parte superior debe tener transparencia para que la que está en la parte inferior sea visible.

Aquí está mi código hasta ahora:

from Tkinter import * import ttk from PIL import Image, ImageTk root = Tk() face = Image.open("faces/face.gif") eyes = Image.open("faces/eyes1.png") face = face.convert("RGBA") eyes = eyes.convert("RGBA") facedatas = face.getdata() eyesdatas = eyes.getdata() newData = [] for item in eyesdatas: if item[0] == 255 and item[1] == 255 and item[2] == 255: newData.append((255, 255, 255, 0)) else: newData.append(item) eyes.putdata(newData) eyes.save("eyes0.png", "PNG") facepic = ImageTk.PhotoImage(face) eyespic = ImageTk.PhotoImage(eyes) label1 = Label(image=facepic) label1.image = facepic label1.grid(row = 0, column = 0) label2 = Label(image=eyespic) label2.image = eyespic label2.grid(row = 0, column = 0) root.mainloop() 

Y esto es lo que obtengo cuando lo ejecuto:

Los ojos

Cuando me gustaría obtener esto:

cara y ojos

Con la cara en la parte inferior y los ojos en la parte superior.

Prueba esto

 from PIL import Image, ImageTk from Tkinter import Tk, Label root = Tk() def RBGAImage(path): return Image.open(path).convert("RGBA") face = RBGAImage("faces/face.gif") eyes = RBGAImage("faces/eyes1.png") face.paste(eyes, (0, 0), eyes) facepic = ImageTk.PhotoImage(face) label1 = Label(image=facepic) label1.grid(row = 0, column = 0) root.mainloop() 

No tengo ambas imágenes de origen, así que no puedo estar seguro de que funcionará con ellas. Por favor, proporcione los originales de ambos si hay algún problema.

Puede usar Image.alpha_composite para crear una nueva imagen compuesta.

 from PIL import Image, ImageTk from Tkinter import Tk, Label root = Tk() def RBGAImage(path): return Image.open(path).convert("RGBA") face = RBGAImage("faces/face.gif") eyes = RBGAImage("faces/eyes1.png") c = Image.alpha_composite(face, eyes) facepic = ImageTk.PhotoImage(c) label1 = Label(image=facepic) label1.grid(row = 0, column = 0) root.mainloop()