我正在尝试在我的Django应用程序中为我的模型添加图像。
models.py
class ImageMain(models.Model):
product = models.ForeignKey(Product)
photo = models.ImageField(upload_to='products')
在开发模式下,每当我尝试通过Django管理员上传图像时,我都会得到:
上传有效图片。您上传的文件不是图片或 图像损坏。
我通过fink安装了libjpeg,然后在ox X 10.5.7上安装了PIL 1.1.6
from PIL import Image
file = open('/Users/Bryan/work/review_app/media/lcdtvs/samsung_UN46B6000_front.jpg', 'r')
trial_image = Image.open(file)
trial_image.verify()
似乎jpg基于该会话有效。但是,它不会加载。 我尝试过其他jpgs,它们也不起作用。
可能出现什么问题?
我能够成功上传png文件。
答案 0 :(得分:16)
在PIL已经在系统上编译/安装后,你安装了libjpeg吗?也许它无法正确找到解码器?
这里有一套关于让libjpeg和PIL在MacOS上播放得很好的指令(看到最后;看起来你可能需要明确设置解码器的目录):
答案 1 :(得分:16)
我在Ubuntu服务器遇到同样的问题,然后你可以通过在PIL之前安装libjpeg-dev来修复它。
sudo apt-get install libjpeg-dev
sudo pip install PIL --upgrade
如果你已经在PIL之后安装了libjpeg-dev。然后你可以先删除PIL,然后尝试重新安装PIL。
sudo pip uninstall PIL
sudo apt-get install libjpeg-dev
sudo pip install PIL
它对我有用,并希望它适合你。
答案 2 :(得分:2)
注意,对于在Ubuntu上使用virtualenv获得此错误的任何人,this帖子都很有帮助。
基本上,Ubuntu会将共享对象安装到pip不知道的位置。在这种情况下,pip期望系统库位于/ usr / lib中,但是Ubuntu将它们放在/ usr / lib / x86_64-linux-gnu或其他一些与architexture相关的位置。
短期解决方法是简单地将库符号链接到/ usr / lib:
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
这解决了我在Ubuntu 12.04上的错误。
答案 3 :(得分:1)
这将安装特定于您的操作系统的PIL。 请确保/usr/local/lib/python2.6/dist-packages/中生成的egg文件有egg信息(因为当我做同样的情况时,egg文件不正确)。如果没有,则只需将PIL-build-specific-name重命名为PIL,并在dist-packages文件夹中添加PIL.pth文件。在PIL.pth文件中写PIL,你就完成了
答案 4 :(得分:1)
我在Ubuntu 11.04上遇到了类似的问题。显然在Ubuntu 11中,似乎你需要libjpeg8-dev,而不是libjpeg或libjpeg62。感谢Guillaumes发表http://gpiot.com/ubuntu-9-10-install-pil-in-virtualenv/
答案 5 :(得分:0)
我有这个问题,虽然在Linux而不是Mac上,所以可能无法提供太具体的信息。 但是你也可能需要libjpeg-devel(如果有Mac的通讯员)。
还要确保完全从系统中清除当前的PIL安装。在确定正确安装了libjpeg之后,请使用build_ext -i重新安装PIL。然后运行PIL的selftest.py来检查它是否给出了JPEG错误。
答案 6 :(得分:0)
Django正试图从名为PIL
的文件夹中导入PIL,但PIL会将自己安装在名为{1}的文件夹中。 PIL-1.1.7-py2.6-macosx-10.6-universal.egg
,因此导入失败 - Django(或PIL?)似乎将其解释为损坏的图像。
一个简单的符号链接
host:~ user$ cd /Library/Python/2.6/site-packages
host:site-packages user$ ln -vis PIL-1.1.7-py2.6-macosx-10.6-universal.egg PIL
create symbolic link `PIL' to `PIL-1.1.7-py2.6-macosx-10.6-universal.egg'
已在Mac OSX 10.6.x MBP上为我修复此问题。
在Linux机器上,该文件夹可能会被称为dist-packages
并位于/usr/lib/python/
左右,但想法是一样的。
您经常可以找到通常安装python模块的文件夹,如here所述。
答案 7 :(得分:0)
'python -v'然后'import _imaging'对于确定加载_imaging.so的位置非常有用。如果重新安装PIL而不清除站点包中的PIL目录,那么您可能仍在使用Python包目录下的旧_imaging.so运行。 PIL的selftest.py会通过,因为你的构建目录中有一个新的_imaging.so。并确保在setup.py中编辑JPEG_ROOT以在构建时获取正确的头和.so目录。
答案 8 :(得分:0)