如何在不在 Tkinter 中拉伸图像的情况下调整图像大小?
How can I resize image without stretching it in Tkinter?
我目前正在做一个需要显示不同尺寸图像的项目。所以我想为此目的使用 tkinter。
这是我显示图片的代码
from tkinter import Tk, Label
from PIL import Image, ImageTk
root = Tk()
root.title("Display Images")
root.geometry('550x550')
root.maxsize(550, 550)
root.iconbitmap('icon.ico')
root.configure(background='#333')
image = Image.open('./image.jpg')
resized_image = image.resize((540, 540), Image.ANTIALIAS)
disp_image = ImageTk.PhotoImage(resized_image)
label = Label(image=disp_image) #.pack(padx=10, pady=10)
label.configure(border=0)
label.pack(padx=10, pady=10)
root.mainloop()
效果很好,但是
我想在不拉伸的情况下显示不同尺寸的图像。
比如,如果图像大小超过window大小,则应采用window大小,如果图像大小小于window大小,则有图片大小应该没有变化。
示例:
我有两张宽度和高度 [200x300, 400x500] 的图像
我的显示尺寸(windows 宽度和高度)是 350x350
当我显示尺寸为 200x300 的图像时,它应该按原样显示而尺寸没有变化,而当我显示另一张图像时它应该将尺寸更改为 350x350
那么,有什么办法可以做到吗?
这是一个解决方案:
from tkinter import Tk, Label
from PIL import Image, ImageTk
root = Tk()
root.title("Display Images")
root.geometry('550x550')
root.maxsize(550, 550)
root.configure(background='#333')
image = Image.open('./image.jpg')
# main part -----------------------------------------
if image.width > 540 and image.height > 540:
resized_image = image.resize((540, 540), Image.ANTIALIAS)
elif image.width > 540:
resized_image = image.resize((540, image.height), Image.ANTIALIAS)
elif image.height > 540:
resized_image = image.resize((image.width, 540), Image.ANTIALIAS)
else:
resized_image = image
# end main part ----------------------------------------
disp_image = ImageTk.PhotoImage(resized_image)
label = Label(image=disp_image, border=0)
label.pack(padx=10, pady=10)
root.mainloop()
简单使用if statements
.
我目前正在做一个需要显示不同尺寸图像的项目。所以我想为此目的使用 tkinter。
这是我显示图片的代码
from tkinter import Tk, Label
from PIL import Image, ImageTk
root = Tk()
root.title("Display Images")
root.geometry('550x550')
root.maxsize(550, 550)
root.iconbitmap('icon.ico')
root.configure(background='#333')
image = Image.open('./image.jpg')
resized_image = image.resize((540, 540), Image.ANTIALIAS)
disp_image = ImageTk.PhotoImage(resized_image)
label = Label(image=disp_image) #.pack(padx=10, pady=10)
label.configure(border=0)
label.pack(padx=10, pady=10)
root.mainloop()
效果很好,但是
我想在不拉伸的情况下显示不同尺寸的图像。
比如,如果图像大小超过window大小,则应采用window大小,如果图像大小小于window大小,则有图片大小应该没有变化。
示例: 我有两张宽度和高度 [200x300, 400x500] 的图像 我的显示尺寸(windows 宽度和高度)是 350x350
当我显示尺寸为 200x300 的图像时,它应该按原样显示而尺寸没有变化,而当我显示另一张图像时它应该将尺寸更改为 350x350
那么,有什么办法可以做到吗?
这是一个解决方案:
from tkinter import Tk, Label
from PIL import Image, ImageTk
root = Tk()
root.title("Display Images")
root.geometry('550x550')
root.maxsize(550, 550)
root.configure(background='#333')
image = Image.open('./image.jpg')
# main part -----------------------------------------
if image.width > 540 and image.height > 540:
resized_image = image.resize((540, 540), Image.ANTIALIAS)
elif image.width > 540:
resized_image = image.resize((540, image.height), Image.ANTIALIAS)
elif image.height > 540:
resized_image = image.resize((image.width, 540), Image.ANTIALIAS)
else:
resized_image = image
# end main part ----------------------------------------
disp_image = ImageTk.PhotoImage(resized_image)
label = Label(image=disp_image, border=0)
label.pack(padx=10, pady=10)
root.mainloop()
简单使用if statements
.