调整图像大小并使其适合画布大小

Posted

技术标签:

【中文标题】调整图像大小并使其适合画布大小【英文标题】:Resizing Image and fit it to the Canvas size 【发布时间】:2014-05-07 07:15:33 【问题描述】:

谁能帮我使用 ImageTk 调整图像大小?

我有一个画布,我会把图片放在那里。

我有不同类型的图片 = 所有图片的尺寸不同

当我将图片(只有一张)附加到画布中时,我希望调整图片的大小,使其适合画布并且仍保持其比例。

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

更新:

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

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

上图使用:

【问题讨论】:

这里是slideshow application implemented in Tkinter. It resize images to fit inside the app. window 【参考方案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) 缩略图相同。

【讨论】:

以上是关于调整图像大小并使其适合画布大小的主要内容,如果未能解决你的问题,请参考以下文章

CSS使图像调整大小并适合任何屏幕

调整UIImageView的大小以包装“适合方面”的图像

按比例调整图像大小以适合 HTML5 画布

如何在 <li> 网格上调整图像和文本的大小并使其居中?

CSS 图像大小调整

如何在不损失图像质量的情况下调整图像大小以适合小型 HTML5 画布? [复制]