【问题标题】:Image display issue图片显示问题
【发布时间】:2013-03-26 00:33:44
【问题描述】:

当我加载透明图像时:

def load_image(path):
    img = Image.open(path)
    return ImageTk.PhotoImage(img)

class Home_Screen(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.home = Tk()
        self.home.resizable(width = False,height = False)
        self.home.geometry("700x500+300+100")
        self.start()

    def run(self):
        self.images()
        Label(self.home, image = self.background).pack() # Put it in the display window
        button_instructions = Label(self.home,image = self.b_instructions).place(x = 300,y = 200)
        self.home.mainloop()

    def images(self):
        self.background = load_image("Images/night-sky.jpg")
        self.b_instructions = load_image("button_instructions.png")

    def start_game(self):
        self.home.destroy()

Home = Home_Screen()

我得到一个带有白色边框的图像。有谁知道为什么没有保留原来的透明度?如果可以,请提供解决方案。

【问题讨论】:

  • 只是为了确定,您确定图像具有 Alpha 通道(如 PNG,而不是 JPEG)?
  • 我确定我有一张透明的 .png 图像,我检查了几次
  • 首先,您必须弄清楚在哪里失去了透明度。获取img 的模式以确保它具有alpha 通道,然后执行pixels=img.load() 并确保某些像素实际上是透明的。尝试将img 保存到一个新的PNG 文件,并确保它仍然是透明的。如果一切正常,那么问题PhotoImage 中,或者在您显示它的方式上。但我敢打赌它不是。

标签: python image tkinter transparency python-imaging-library


【解决方案1】:

使用画布而不是标签小部件。透明度不会丢失,因为您看到的是小部件的背景。

def run(self):
    img_sky = ImageTk.PhotoImage(file="Images/night-sky.jpg")
    img_button = ImageTk.PhotoImage(file="button_instructions.png")
    self.canvas = Canvas(self.home, width=700, height=500)
    self.canvas.create_image(0, 0, image=img_sky)
    self.canvas.create_image(300, 200, image=img_button)
    self.canvas.pack()
    self.home.mainloop()

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多