Sachin Acharya
Sachin Acharya

Reputation: 83

How can I resize image without stretching it in Tkinter?

I am currently working on a project which requires displaying Images of different sizes. So I wanted to use tkinter for that purpose.

Here is my Code for displaying image

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

which works perfectly fine but

I wanted to display different sizes of images without stretching them.

Like, If image size exceeds the window size, it should take the size of the window, and If image size is less than the size of the window then there should be no change in image size.

Example: I have two images of width and height [200x300, 400x500] and my display size(windows width and height) is 350x350

When I display an image of size 200x300, it should display as it is without change in size and when I display another image it should change its size to 350x350

So, is there a way to pull that off?

Upvotes: 0

Views: 746

Answers (1)

Matiiss
Matiiss

Reputation: 6176

Here is a solution:

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

Simple use of if statements.

Upvotes: 1

Related Questions