【问题标题】:Tkinter Image transparencyTkinter 图像透明度
【发布时间】:2016-02-27 13:26:52
【问题描述】:

所以我有 2 张图像要叠加显示。 顶部的图像应具有透明度,以便底部的图像可见。

到目前为止,这是我的代码:

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

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

当我想获得这个时:

脸在下,眼睛在上。

【问题讨论】:

    标签: python tkinter python-imaging-library


    【解决方案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()
    

    【讨论】:

      【解决方案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()
      

      我没有你的两个源图像,所以我不能确定它是否可以与它们一起使用。如有问题,请提供两者的原件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多