如何在 Python 中正确显示图像?
How to properly display image in Python?
我找到了这段代码:
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的图片显示在window尺寸为602x602px的图片中,但是window尺寸是正确的。
Take a look (full image)。
我做错了什么?
P.S。抱歉英语不好。
嗯,不,您的第一个示例仍然被截断了几个像素。所有顶级 windows 都将在其绝对边界周围填充,以防止其他元素 'bleeding' 进入边界并看起来不专业。
您仍然得到 604 x 604 像素的 canvas,但根 window 本身正在声明其填充。我找不到任何方法来删除这个顶级填充,而且它在其他操作系统中可能看起来很不一样。解决方法是请求 canvas 比您要显示的图像稍大的尺寸。
另一个问题,如果你的目标是精确,那么这条线...
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)
我找到了这段代码:
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的图片显示在window尺寸为602x602px的图片中,但是window尺寸是正确的。 Take a look (full image)。 我做错了什么?
P.S。抱歉英语不好。
嗯,不,您的第一个示例仍然被截断了几个像素。所有顶级 windows 都将在其绝对边界周围填充,以防止其他元素 'bleeding' 进入边界并看起来不专业。
您仍然得到 604 x 604 像素的 canvas,但根 window 本身正在声明其填充。我找不到任何方法来删除这个顶级填充,而且它在其他操作系统中可能看起来很不一样。解决方法是请求 canvas 比您要显示的图像稍大的尺寸。
另一个问题,如果你的目标是精确,那么这条线...
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)