Изменение размера изображения в PIL в Tkinter

В настоящее время я использую PIL для отображения изображений в Tkinter. Я хотел бы временно изменить размер этих изображений, чтобы их можно было просмотреть более легко. Как я могу это сделать?

Отрывок:

self.pw.pic = ImageTk.PhotoImage(Image.open(self.pic_file))
self.pw.pic_label = TK.Label(self.pw , image=self.pw.pic,borderwidth=0)         
self.pw.pic_label.grid(column=0,row=0)

Ответ 1

Вот что я делаю, и это работает довольно хорошо...

image = Image.open(Image_Location)
image = image.resize((250, 250), Image.ANTIALIAS) ## The (250, 250) is (height, width)
self.pw.pic = ImageTk.PhotoImage(image)

Там вы идете :)

РЕДАКТИРОВАТЬ:

Вот мое утверждение импорта:

from Tkinter import *
import tkFont
from PIL import Image

И вот полный рабочий код, из которого я адаптировал этот пример:

im_temp = Image.open(Image_Location)
im_temp = im_temp.resize((250, 250), Image.ANTIALIAS)
im_temp.save("ArtWrk.ppm", "ppm") ## The only reason I included this was to convert
## The image into a format that Tkinter woulden't complain about
self.photo = PhotoImage(file="ArtWrk.ppm") ## Open the image as a tkinter.PhotoImage class()
self.Artwork.destroy() ## Erase the last drawn picture (in the program the picture I used was changing)
self.Artwork = Label(self.frame, image=self.photo) ## Sets the image too the label
self.Artwork.photo = self.photo ## Make the image actually display (If I don't include this it won't display an image)
self.Artwork.pack() ## Repack the image

А вот документы класса PhotoImage: http://www.pythonware.com/library/tkinter/introduction/photoimage.htm

Примечание... После проверки документации по pythonware для класса ImageTK PhotoImage (что очень мало), я обнаружил, что если ваш фрагмент работает, то это должно произойти так же, как и при импорте библиотеки PIL "Image" и библиотеки PIL "ImageTK" и что и PIL, и tkinter актуальны. С другой стороны, я даже не могу найти жизнь модуля "ImageTK" для моей жизни. Не могли бы вы опубликовать свой импорт?

Ответ 2

если вы не хотите сохранить это, вы можете попробовать это:

from Tkinter import *
from PIL import Image, ImageTk

root = Tk()

same = True
#n can't be zero, recommend 0.25-4
n=2

path = "../img/Stalin.jpeg" 
image = Image.open(path)
[imageSizeWidth, imageSizeHeight] = image.size

newImageSizeWidth = int(imageSizeWidth*n)
if same:
    newImageSizeHeight = int(imageSizeHeight*n) 
else:
    newImageSizeHeight = int(imageSizeHeight/n) 

image = image.resize((newImageSizeWidth, newImageSizeHeight), Image.ANTIALIAS)
img = ImageTk.PhotoImage(image)

Canvas1 = Canvas(root)

Canvas1.create_image(newImageSizeWidth/2,newImageSizeHeight/2,image = img)      
Canvas1.config(bg="blue",width = newImageSizeWidth, height = newImageSizeHeight)
Canvas1.pack(side=LEFT,expand=True,fill=BOTH)

root.mainloop()

Ответ 3

проще всего создать новое изображение на основе оригинала, а затем заменить оригинал на большую копию. Для этого tk-образ имеет метод copy, который позволяет масштабировать или подвыражать исходное изображение при создании копии. К сожалению, это позволяет вам масштабировать/подвынимать в коэффициентах 2.