2010-11-01 22 views
10

Tôi hiện đang sử dụng PIL để hiển thị hình ảnh trong Tkinter. Tôi muốn tạm thời thay đổi kích thước những hình ảnh này để chúng có thể được xem dễ dàng hơn. Làm thế nào tôi có thể đi về điều này?Thay đổi kích thước hình ảnh trong PIL trong Tkinter

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) 

Trả lời

20

Dưới đây là những gì tôi làm và nó hoạt động khá tốt ...

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

Có bạn đi :)

EDIT:

Đây là của tôi báo cáo nhập:

from Tkinter import * 
import tkFont 
import Image #This is the PIL Image library 

Và đây là đoạn code làm việc hoàn chỉnh tôi thích ví dụ này từ:

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 

Và đây là các tài liệu lớp PhotoImage: http://www.pythonware.com/library/tkinter/introduction/photoimage.htm

Note ... Sau khi kiểm tra các tài liệu pythonware trên PhotoImage ImageTK của class (Rất thưa thớt) Tôi xuất hiện nếu đoạn mã của bạn hoạt động tốt hơn điều này cũng như khi bạn nhập Thư viện "Hình ảnh" PIL, thư viện PIL "ImageTK" và cả PIL và tkinter đều được cập nhật. Ở một khía cạnh khác, tôi thậm chí không thể tìm thấy cuộc sống mô-đun "ImageTK" cho cuộc sống của tôi. Bạn có thể đăng nhập của mình không?

+2

tôi tiếp tục nhận được này "AttributeError: Ví dụ PhotoImage không có thuộc tính 'thay đổi kích thước ''. Tôi cần nhập gì? – rectangletangle

+0

@ Anteater7171 Bao gồm một số thông tin khác – Joshkunz

+0

Đó là (chiều rộng, chiều cao), không (chiều cao, chiều rộng). – Jacob

1

cách dễ nhất có thể là tạo hình ảnh mới dựa trên bản gốc, sau đó hoán đổi bản gốc bằng bản sao lớn hơn. Đối với điều đó, một hình ảnh tk có một phương pháp copy cho phép bạn phóng to hoặc mẫu phụ ảnh gốc khi tạo bản sao. Đáng tiếc là nó chỉ cho phép bạn phóng to/subsample trong các yếu tố của 2.

3

nếu bạn không muốn lưu nó, bạn có thể thử nó:

from Tkinter import * 
import ImageTk 
import Image 

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