2011-05-30 134 views
5

我想創建並在我的項目中userProfile模型保存原始用戶圖像時保存的縮略圖,下面是我的代碼:爲什麼PIL縮略圖不能正確調整大小?

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的圖像。

任何人都可以告訴我我做錯了什麼?如何強制我想要的寬高比?

P.S .:我已經嘗試了尺寸的所有方法:tupal: THUMB_SIZE = (45, 45)並將尺寸直接輸入縮略圖功能。

另一個問題:PIL中調整大小和縮略圖函數之間的區別是什麼?何時使用調整大小以及何時使用縮略圖?

回答

12

image.thumbnail()功能將保持原始圖像的寬高比。

改爲使用image.resize()

UPDATE

image = image.resize(THUMB_SIZE, Image.ANTIALIAS)   
thumb_fn = fn + '-thumb' + ext 
tf = NamedTemporaryFile() 
image.save(tf.name, 'JPEG') 
+1

見http://www.pythonware.com/library/pil/handbook/image.htm#Image.thumbnail – Exelian 2011-05-30 14:57:20

+0

好,我會附上鍊接我的答案=) – BFil 2011-05-30 15:01:01

+0

10倍,但我也嘗試過image.resize(THUMB_SIZE,Image.ANTIALIAS),其中THUMB_RESIZE是一個tupal(THUMB_RESIZE =(45,45),它現在沒有調整大小...任何東西別的在這裏? (這是我讀的鏈接)...謝謝:-) – Erez 2011-05-30 16:16:05

4

考慮:

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)) 
+0

我已經有了答案,但謝謝:-) – Erez 2011-05-30 23:23:48

相關問題