Django如何确定上传的图片是否有效?

3
我正在尝试在我的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预览中查看,因此似乎是有效的。
问题似乎是Python Imaging Library无法将其识别为图像。为什么会发生这种情况呢?即使是有效的图像?
PIL已安装,并通过Django shell进行了验证。
3个回答

12

根据Django源代码,这三行代码负责验证图片:

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

图片类型可能不被 PIL 支持。请查看此处支持的格式列表。


图像是jpeg格式的,根据列表已安装。 - BryanWheelock
尝试在PIL中打开图像并查看结果。即使您可以在OS X预览中查看它,该图像可能确实已损坏。 - Nadia Alramli
IOError: 解码器jpeg不可用 我已经安装了PIL 1.1.6版本 我将尝试安装libjpeg。 - BryanWheelock

2
您尝试过上传 gif 或 png 格式的图像吗?可能是您的 PIL 没有正确构建 jpeg 库。我在 Ubuntu 上使用 Django 时遇到了类似的问题。如果您曾经看到过错误消息“decoder jpeg not available”,请查看此 link。链接中的相关行如下:
$ cd libImaging
$ ./configure --with-jpeg=/somelib/lib --with-zlib=/somelib/lib

0

我查看了Django源代码,在django/forms/fields.py中的ImageField类中。Django实际上使用PIL来确定图像是否有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接