Mas
Mas

Reputation: 351

PhotoImage zoom

I'm trying to zoom in on an image and display it with the following code

import tkinter as tk
from PIL import Image as PIL_image, ImageTk as PIL_imagetk

window = tk.Tk()

img1 = PIL_imagetk.PhotoImage(file="C:\\Two.jpg")
img1 = img1.zoom(2)

window.mainloop()

But python says AttributeError: 'PhotoImage' object has no attribute 'zoom'. There is a comment on a related post here: Image resize under PhotoImage which says "PIL's PhotoImage does not implement zoom from Tkinter's PhotoImage (as well as some other methods)".

I think this means that I need to import something else into my code, but I'm not sure what. Any help would be great!

Upvotes: 2

Views: 7488

Answers (1)

Bruno Vermeulen
Bruno Vermeulen

Reputation: 3455

img1 has no method zoom, however img1._PhotoImage__photo does. So just change your code to:

import tkinter as tk
from PIL import Image as PIL_image, ImageTk as PIL_imagetk

window = tk.Tk()

img1 = PIL_imagetk.PhotoImage(file="C:\\Two.jpg")
img1 = img1._PhotoImage__photo.zoom(2)

label =  tk.Label(window, image=img1)
label.pack()

window.mainloop()

By the way if you want to reduce the image you can use the method subsample img1 = img1._PhotoImage__photo.subsample(2) reduces the picture by half.

If you have a PIL Image, then you can use resize like following example:

import tkinter as tk
from PIL import Image, ImageTk

window = tk.Tk()

image = Image.open('C:\\Two.jpg')
image = image.resize((200, 200), Image.ANTIALIAS)
img1 = ImageTk.PhotoImage(image=image)

label = tk.Label(window, image=img1)
label.pack()

window.mainloop()

Note I just import Image and ImageTk, see no need to rename to PIL_image and PIL_imagetk, which to me is only confusing

Upvotes: 1

Related Questions