Изменение размера изображения и подогнать его под размер холста

Может ли кто-нибудь помочь мне изменить размер изображения с помощью 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()

Изображение, использованное выше: введите здесь описание изображения


person user3404844    schedule 28.03.2014    source источник


Ответы (1)


Попробуйте сохранить миниатюру как отдельную переменную:

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) эскизом.

person ndsu_jurf    schedule 28.03.2014