我正在尝试在保存项目中的userProfile
模型中的原始用户图像时创建并保存缩略图像,以下是我的代码:
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, self).save(*args, **kwargs)
一切都正常,只有一个问题。
问题在于缩略图函数只将宽度设置为
45
,而不改变图像的长宽比,所以我正在测试的那个短图像得到的是一个45*35
的图像。请问我做错了什么?如何强制使用我想要的长宽比?
另外一个问题:PIL中resize和thumbnail函数之间有什么区别?什么时候该使用resize,什么时候该使用thumbnail?
附注:我已经尝试了所有的大小方法:
tupal: THUMB_SIZE = (45, 45)
和直接将大小输入缩略图函数。
image.fit(THUMB_SIZE, Image.ANTIALIAS)
,它将使用给定的尺寸但通过裁剪图像来保持纵横比。请参见:http://djangosaur.tumblr.com/post/422589280/django-resize-thumbnail-image-pil - Alp