ImageTk和PIL无法正确显示png图像

时间:2017-05-27 22:11:38

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

我目前正在尝试使用PIL和Tkinter模块在python中编写某种映射工具。到目前为止几乎一切都很好。在ui的设置过程中,创建了一个虚拟映像(基于几个输入png文件),这似乎也运行良好。但是,当尝试使用ImageTk.Photo在画布内显示此图片时,显示屏会显示绝对不是图片的内容。出于调试原因,我使用PIL.Image本身的show方法输出了我的图片。

然而show方法显示的内容和画布显示方式有所不同 - 我无法找出解决方案,并希望得到帮助。

首先代码是例外的(我只显示画布的初始化和图片的显示,因为整个代码会非常长,而且我猜不到内部了。)

这是除画布初始化之外的代码(我显示一个完整的黑色图片,直到用户加载了显示图片所需的所有资源):

    self.tileset_canvas = tkinter.Canvas(root, width=1024, height=1024)
    self.tileset_canvas.create_line(0, 0, 80, 80)
    self.tileset_raw_image = ImageTk.PhotoImage(PImage.new("RGB", (1024, 1024), "black"))
    self.tileset_canvas_image = self.tileset_canvas.create_image(0, 0, image=self.tileset_raw_image)
    self.tileset_canvas.grid(row=4, column=6, sticky=tkinter.W)

此外,在另一种方法中,我改变了图像的显示:

        merged_img = PImage.new("RGB", (128, 512))
        merged_img.paste(tsp_img, (0, 0))
        merged_img.paste(tss_img, (0, 320))
        merged_img = merged_img.resize((1024, 1024)) #Double the view for a better mapping expierience
        merged_img = merged_img.convert(mode="RGB")
        self.tileset_raw_image = ImageTk.PhotoImage(merged_img)
        merged_img.show()
        self.tileset_canvas.itemconfig(self.tileset_canvas_image, image=self.tileset_raw_image)

正如您所看到的,我还调用了show方法来查看图片的实际效果。

这是show方法在图片上调用时输出的内容: Output of show method

然而,这是ui中显示的内容: Output in the ui

1 个答案:

答案 0 :(得分:0)

对于任何关心的人来说,似乎图像不仅正确锚定,而是固定在画布的中间。