问题描述
|
将原始用户图像保存到项目中的“ 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))