Django ImageField “上传有效图像。您上传的文件不是图像或图像已损坏。”

5 投票
3 回答
6516 浏览
提问于 2025-04-17 03:24

我已经安装了PIL这个库,但是每次我通过Django后台上传一个.png格式的图片时,都会出现这个错误:

“上传一个有效的图片。你上传的文件要么不是图片,要么是损坏的图片。”

其他格式的图片都能正常上传。我试过好几种不同的PNG文件。

我还在安装了pypng、libpng-dev等之后尝试重新安装PIL,并且我是在Ubuntu服务器上操作的。

3 个回答

0

我发现,在Ubuntu上安装PIL可能会遇到问题,因为libpng的位置不太标准,PIL找不到它。

在你下载PIL的文件夹里,找到并编辑setup.py文件。找到下面这一行:

JPEG_ROOT = None

然后把它改成:

JPEG_ROOT = '/usr/lib/i386-linux-gnu/'

接着重新构建PIL,并查看最后的消息,确认PNG支持已经包含在内。

我知道在想要添加PNG支持的时候修改JPEG_ROOT听起来有点奇怪,但其实setup.py也会在JPEG_ROOT里查找libpng

7

这个问题是通过用pip安装“pillow”来解决的,而不是安装“pil”。这样做可以更方便地在虚拟环境中使用。

3

当你编译PIL的时候,它应该会告诉你是否支持PNG格式。如果你在自己安装的时候遇到问题,我建议你使用Ubuntu自带的版本。这个版本的名字有点奇怪,但安装起来很简单,你可以用下面的命令:

apt-get install python-imaging

撰写回答