2014-03-28 771 views
0

任何人都可以幫助我如何使用ImageTk調整圖像大小?調整圖像大小並將其適應Canvas大小[Tkinter | PhotoImage]

我有一個畫布,我會把圖片放在那裏。

我有各種不同的照片=不同尺寸的所有圖片

當我附上在畫布上的圖片(只有一個),我希望畫面的大小來調整,使其適合在畫布上,並它仍然會保持其比例。

請幫幫我!我是PIL,Tkinter和Python中的新成員。

更新:

我使用Imagethumbnail嘗試,但在調整:

self.image.thumbnail(self.picsize,Image.ANTIALIAS) 

圖像不配合畫布大小,如果圖像比帆布長/寬,它只是切。 (不調整大小以裝配到畫布)


代碼:

from PIL import ImageTk 
from Tkinter import * 
import os,tkFileDialog,Image 

picsize = 250,250 # I want to set this so that it will fit in the self.imagecanvas | Every images attached will share same Size 
imagepath = "Default_ProPic.jpg" 
class GUI(): 
    global picsize 
    def display(self): 
     self.canvas = Canvas(width=1200,height=700) 
     self.canvas.pack() 

     self.imagecanvas = Canvas(self.canvas,width=400,height=400) 
     self.imagecanvas.place(x=980,y=180) 
     self.image = Image.open(imagepath) 
     self.image.thumbnail(picsize,Image.ANTIALIAS) 
     self.newimage = ImageTk.PhotoImage(self.image) 
     self.profile_picture=self.imagecanvas.create_image(0,0,anchor = NW,image=self.newimage) 

     attachbutton = Button(self.canvas,text="  Profile Pic  ",command=lambda:self.attachpic()) 
     attachbutton.place(x=1030,y=320) 

     mainloop() 

    def attachpic(self): 
     global picsize 
     attachphoto = tkFileDialog.askopenfilename(title="Attach photo") 
     self.image = Image.open(attachphoto) 
     self.image.thumbnail(picsize,Image.ANTIALIAS) 
     self.newimage = ImageTk.PhotoImage(self.image) 
     self.imagecanvas.itemconfigure(self.profile_picture, image=self.newimage) 

GUI = GUI() 
GUI.display() 

圖片上面使用:enter image description here

+0

這裏是[在Tkinter中實現的幻燈片應用程序。它調整圖像大小以適應應用程序內部。窗口(https://gist.github.com/zed/8b05c3ea0302f0e2c14c) – jfs

回答

0

嘗試保存縮略圖作爲一個單獨的變量:

self.thmb_img = self.image.thumbnail(picsize, Image.ANTIALIAS) 

我su SPECT可以採取原self.image = Image.open(attachphoto)

我會建議看什麼大小是怎麼回事:

def attachpic(self): 
    picsize = 250, 250 
    attachphoto = tkFileDialog.askopenfilename(title="Attach photo") 
    self.image = Image.open(attachphoto) 
    print self.image.size() 
    self.thmb_img = self.image.thumbnail(picsize,Image.ANTIALIAS) 
    print self.thmb_img.size() 

檢查輸出尺寸,並驗證它是像原來一樣與所需的(250,250 )縮略圖。