如何在Python中正确显示图像?

时间:2016-07-31 17:24:32

标签: python python-3.x tkinter python-imaging-library

我找到了这段代码:

from PIL import Image, ImageTk
import tkinter as tk

root = tk.Tk()

img = Image.open(r"Sample.jpg")
canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()
tk_img = ImageTk.PhotoImage(img)
canvas.create_image(250, 250, image=tk_img)

root.mainloop()

以500x500px分辨率显示任何图片。我试图改变它并以原始尺寸显示它:

from PIL import Image, ImageTk
import tkinter as tk

root = tk.Tk()

img = Image.open(r"D:/1.jpg")
canvas = tk.Canvas(root, width=img.width, height=img.height)
canvas.pack()
tk_img = ImageTk.PhotoImage(img)
canvas.create_image(img.width/2, img.height/2, image=tk_img)

root.mainloop()

但出了点问题,尺寸为604x604px的图片显示在一个大小为602x602px的窗口中,但窗口大小是正确的。 Take a look (full image)。 我做错了什么?

P.S。抱歉英语不好。

1 个答案:

答案 0 :(得分:1)

嗯,不,你的第一个例子仍然会被几个像素切断。所有顶级窗口都会在其绝对边框周围填充,以防止其他元素“渗入”边框并且看起来不专业。

您仍然会获得一个604像素×604像素的画布,但根窗口本身正在声明其填充。我找不到任何删除此顶级填充的方法,并且在其他操作系统中可能会有不同的显示方式。解决方法可能是要求画布尺寸略大于您想要显示的图像。

另一个问题,如果你的目标是精确,那就是行......

canvas.create_image(img.width/2, img.height/2, image=tk_img)

如果您的宽度或高度是奇数,则可能会产生一个错误。您可以将图像锚定到西北角,并将它们放置在坐标(0, 0)上,如下所示:

canvas.create_image(0, 0, anchor=tk.NW, image=tk_img)