调整图像大小并使其适合画布大小[Tkinter | PhotoImage]

时间:2014-03-28 01:19:21

标签: python python-2.7 tkinter python-imaging-library

有人可以帮我解决如何使用ImageTk调整图像大小的问题吗?

我有画布,我会把照片放在那里。

我有不同类型的图片=所有图片的大小不同

当我在画布上附上图片(只有一张)时,我希望图片的大小调整大小,以便它适合画布,并且仍然保持其比例。

请帮帮我!我是PIL,Tkinter和Python的新手。

更新

我尝试在thumbnail下使用Image,但需要调整大小:

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

1 个答案:

答案 0 :(得分:0)

尝试将缩略图另存为单独的变量:

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

我怀疑可能是原来的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)缩略图相同。