Redimensionando imágenes en PIL en Tkinter

Actualmente estoy usando PIL para mostrar imágenes en Tkinter. Me gustaría cambiar temporalmente el tamaño de estas imágenes para que se puedan ver más fácilmente. ¿Cómo puedo hacer esto?

Retazo:

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) 

Esto es lo que hago y funciona bastante bien …

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

Hay que ir 🙂

EDITAR:

Aquí está mi statement de importación:

 from Tkinter import * import tkFont from PIL import Image 

Y aquí está el código de trabajo completo que adapté este ejemplo de:

 im_temp = Image.open(Path-To-Photo) 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 dont include this it won't display an image) self.Artwork.pack() ##repack the image 

Y aquí están los documentos de la clase PhotoImage: http://www.pythonware.com/library/tkinter/introduction/photoimage.htm

Nota … Después de consultar la documentación de Pythonware en la clase de imagen de imagen de ImageTK (que es muy escasa), parece que si su fragmento funciona, debería hacerlo siempre que importe la biblioteca “Imagen” de PIL y la biblioteca “ImageTK” de PIL y que tanto PIL como tkinter están al día. En otra nota al margen, ni siquiera puedo encontrar la vida del módulo “ImageTK” para mi vida. ¿Podría publicar sus importaciones?

Si no quieres guardarlo puedes probarlo:

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

lo más fácil podría ser crear una nueva imagen basada en el original, luego intercambiar el original con la copia más grande. Para eso, una imagen tk tiene un método de copy que le permite hacer zoom o submuestras de la imagen original al realizar la copia. Desafortunadamente solo te permite hacer zoom / submuestra en factores de 2.