Tkinter图像透明度

3

我有两张图片需要叠加显示,上面的图片需要透明,这样下面的图片才能被看到。

以下是我的代码:

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

这是我运行它时得到的结果:

眼睛

而我想要获得这个:

脸和眼睛

脸在底部,眼睛在顶部。
2个回答

2

试试这个

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

我没有你的两张源图像,所以无法确定它们是否能够正常工作。如果有问题,请提供两张原始图像。


1
你可以使用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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接