为什么PIL缩略图无法正确调整大小?

问题描述

| 将原始用户图像保存到项目中的“ 0”模型中时,我试图创建并保存缩略图,以下是我的代码:
def save(self,*args,**kwargs):
    super(UserProfile,self).save(*args,**kwargs)
    THUMB_SIZE = 45,45
    image = Image.open(join(MEDIA_ROOT,self.headshot.name))

    fn,ext = os.path.splitext(self.headshot.name)
    image.thumbnail(THUMB_SIZE,Image.ANTIALIAS)        
    thumb_fn = fn + \'-thumb\' + ext
    tf = NamedTemporaryFile()
    image.save(tf.name,\'JPEG\')
    self.headshot_thumb.save(thumb_fn,File(open(tf.name)),save=False)
    tf.close()

    super(UserProfile,**kwargs)
一切正常,就这一件事。 问题在于缩略图功能仅将宽度设置为
45
,并且不改变图像的比例,因此对于正在测试的图像(短图像),我得到的图像为
45*35
。 有人可以告诉我我在做什么错吗?如何强制我要的长宽比? 附注:我已经尝试了所有尺寸设置方法:“ 4”,并将尺寸直接输入缩略图功能。 另一个问题:PIL中的调整大小和缩略图功能之间有何区别?何时使用调整大小以及何时使用缩略图?     

解决方法

        image.thumbnail()函数将保持原始图像的纵横比。 请改用image.resize()。 更新
image = image.resize(THUMB_SIZE,Image.ANTIALIAS)        
thumb_fn = fn + \'-thumb\' + ext
tf = NamedTemporaryFile()
image.save(tf.name,\'JPEG\')
    ,        鉴于:
import Image # Python Imaging Library
THUMB_SIZE= 45,45
image # your input image
如果您想将任何图像的尺寸调整为45×45,则应使用:
new_image= image.resize(THUMB_SIZE,Image.ANTIALIAS)
但是,如果要在调整输入图像大小的同时获得尺寸为45×45的结果图像,请保持其高宽比并用黑色填充丢失的像素:
new_image= Image.new(image.mode,THUMB_SIZE)
image.thumbnail(THUMB_SIZE,Image.ANTIALIAS) # in-place
x_offset= (new_image.size[0] - image.size[0]) // 2
y_offset= (new_image.size[1] - image.size[1]) // 2
new_image.paste(image,(x_offset,y_offset))
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...