2015-11-24 207 views
1

所以我有2張圖像,我想在彼此頂部顯示。 頂部的圖像應具有透明度,以便底部的圖像可見。Tkinter圖像透明度

這裏是我到目前爲止的代碼:

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

這裏是我所得到的,當我運行它:

Eyes

當我想獲得這樣的:

face and eyes

面對我底部和頂部的眼睛。

回答

1

試試這個

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

我沒有這兩個源的圖像,所以我不能肯定它會與他們一起工作。如果有任何問題,請提供兩者的原件。

+0

謝謝,它的工作原理! – Gobnius

0

您可以使用Image.alpha_composite創建一個新的合成圖像。

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