Ошибка атрибута: объект «Фотоизображение» не имеет атрибута «изменить размер» при попытке изменить размер

#python #tkinter #python-imaging-library

Вопрос:

Я всегда боролся с ПИЛОМ, это самый краеугольный камень моего существования. В любом случае, я попытался изменить размер изображения, и я следовал учебнику слово в слово, и это все еще не работает для меня.

 # image
img = ImageTk.PhotoImage(file='goldman.png')

# resized image
changer = img.resize((20,20),Image.ANTIALIAS)

goldman_logo = ImageTk.PhotoImage(changer)

for x in range(2):
    self.my_label = Label(self.invest_row,image=goldman_logo)
    self.my_label.grid(row=x,column=0)
 

и ошибка, которую я получаю, заключается в следующем

 AttributeError: 'PhotoImage' object has no attribute 'resize'
 

Изображение в порядке, я могу загрузить его, если не изменю размер.

Комментарии:

1. A PhotoImage не имеет никакого смысла, кроме как отображаться в Tkinter. Любая обработка изображений должна выполняться на обычном PIL Image , прежде чем преобразовывать его в a PhotoImage .

Ответ №1:

Это не то, как вы открываете и изменяете размер изображений PIL —

 image = Image.open('goldman.png')
image = image.resize((20,20), Image.ANTIALIAS)
my_img = ImageTk.PhotoImage(image)
my_img = Label(root,image = my_img)
my_img.pack()
 

Комментарии:

1. когда я пытаюсь это сделать, изображение не отображается, и оно белое. Однако, если я сделаю обычное фотоизображение, фотография отобразится

2. Что значит быть обычным фотоизображением? А также вам нужно сделать — my_img = Label(root,image...)

3. Да, PIL также трудно установить. Это не имеет большого значения, когда вы не используете PIL

4. @PCM PIL поддерживает намного больше форматов файлов, чем pure tkinter . Кроме того, я не могу найти никакого другого способа преобразования numpy массива в tkinter изображение, кроме использования PIL .

5. Почему вы назначаете Label виджет переменной с именем my_img ?