PhotoImage zoom - PullRequest
       37

PhotoImage zoom

1 голос
/ 16 октября 2019

Я пытаюсь увеличить изображение и отобразить его с помощью следующего кода

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

Но Python говорит AttributeError: 'PhotoImage' object has no attribute 'zoom'. Здесь есть комментарий к соответствующему сообщению: Изменение размера изображения в PhotoImage , в котором говорится, что «PhotoImage PIL не реализует масштабирование от PhotoImage Tkinter (как и некоторых других методов)».

Я думаюэто означает, что мне нужно импортировать что-то еще в мой код, но я не уверен, что. Любая помощь будет отличной!

1 Ответ

1 голос
/ 16 октября 2019

img1 не имеет метода zoom, а img1._PhotoImage__photo - нет. Так что просто измените свой код на:

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

Кстати, если вы хотите уменьшить изображение, вы можете использовать метод subsample img1 = img1._PhotoImage__photo.subsample(2), уменьшающий изображение вдвое.

Еслиу вас есть изображение PIL, затем вы можете использовать изменение размера, как в следующем примере:

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

Примечание. Я просто импортирую Image и ImageTk, не вижу необходимости переименовывать в PIL_image и PIL_imagetk, что меня только смущает

...