【问题标题】:How to properly display image in Python?如何在 Python 中正确显示图像?
【发布时间】:2016-07-31 17:24:32
【问题描述】:

我找到了这段代码:

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

它以 500x500 像素的分辨率显示任何图片。我尝试更改它并以原始大小显示它:

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)。 我做错了什么?

附:抱歉英语不好。

【问题讨论】:

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


    【解决方案1】:

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

    你仍然得到一个 604 x 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)
    

    【讨论】:

    • 问题中链接的屏幕截图显示窗口边框不包含在大小中,窗口边框和图像之间还有一个额外的空白空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2013-07-19
    • 2014-07-25
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多