Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resizing pictures in PIL in Tkinter

Tags:

I'm currently using PIL to display images in Tkinter. I'd like to temporarily resize these images so that they can be viewed more easily. How can I go about this?

Snippet:

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) 
like image 997
rectangletangle Avatar asked Nov 01 '10 01:11

rectangletangle


People also ask

Can you resize an image in tkinter?

The PIL or Pillow library in Python is used for processing images in a Tkinter application. We can use Pillow to open the images, resize them and display in the window. To resize the image, we can use image_resize((width, height) **options) method.

Can you resize an image in Python?

To resize an image, you call the resize() method on it, passing in a two-integer tuple argument representing the width and height of the resized image. The function doesn't modify the used image; it instead returns another Image with the new dimensions.


2 Answers

Here's what I do and it works pretty well...

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

There you go :)

EDIT:

Here is my import statement:

from Tkinter import * import tkFont from PIL import Image 

And here is the complete working code I adapted this example from:

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 

And here are the PhotoImage class docs: http://www.pythonware.com/library/tkinter/introduction/photoimage.htm

Note... After checking the pythonware documentation on ImageTK's PhotoImage class (Which is very sparse) I appears that if your snippet works than this should as well as long as you import the PIL "Image" Library an the PIL "ImageTK" Library and that both PIL and tkinter are up-to-date. On another side-note I can't even find the "ImageTK" module life for the life of me. Could you post your imports?

like image 79
Joshkunz Avatar answered Sep 29 '22 07:09

Joshkunz


if you don't want save it you can try it:

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() 
like image 21
ChaosPredictor Avatar answered Sep 29 '22 08:09

ChaosPredictor