2009-09-02 38 views
3

我想在我的Django應用程序中將圖像添加到我的模型中。Django如何確定上傳的圖像是否有效?

models.py

class ImageMain(models.Model): 
"""This is the Main Image of the product""" 
    product = models.ForeignKey(Product) 
    photo = models.ImageField(upload_to='products') 

在發展模式,每次我試圖上傳通過Django管理的圖像時,我不斷收到:

Upload a valid image. The file you uploaded was either not an image or a corrupted image. 

我想上傳JPG格式可用os X Preview查看它看起來是有效的。

看來問題在於Python Imaging Library無法將其識別爲圖像。爲什麼會出現有效的圖像?

安裝PIL,通過Django shell進行驗證。

回答

12

根據Django的源代碼。這三行負責驗證圖像:

from PIL import Image 
trial_image = Image.open(file) 
trial_image.verify() 

圖像類型可能不受PIL支持。檢查支持的格式列表here

+0

該圖像是一個jpeg並根據列表安裝。 – BryanWheelock 2009-09-02 16:37:23

+0

嘗試打開PIL中的圖像,看看你得到了什麼。該圖像可能確實損壞,即使你可以在os中查看它X Preview – 2009-09-02 16:56:07

+0

IOError:解碼器jpeg不可用 我有PIL版本1.1.6 我將嘗試安裝libjpeg。 – BryanWheelock 2009-09-02 18:59:57

0

我查看了Django源代碼,django/forms/fields.py,ImageField類。 Django實際上確實使用PIL來確定圖像何時有效。

2

你嘗試上傳像gif或png這樣的圖像格式嗎?這可能是因爲你的PIL沒有正確的用jpeg庫構建。我在Ubuntu上與Django有類似的問題。如果您曾經看到錯誤信息decoder jpeg not available,請檢查此link。相關鏈接:

$ cd libImaging 
$ ./configure --with-jpeg=/somelib/lib --with-zlib=/somelib/lib 
相關問題