如何在不在 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.