Kie*_*ynn 3 django django-models libjpeg python-imaging-library
我在Django中遇到了PIL(Python图像库)的一个主要问题,并且已经跳过很多环节,到目前为止还没能弄清楚问题的根源是什么.
问题基本上分解为无法通过Django管理员中的ImageField上传JPEG图像.但问题并不像安装libjpeg那么简单.
首先,我安装了PIL(通过Buildout)并在安装后意识到我没有安装libjpeg,因为JPEG支持不可用.
没有自己设置服务器,我只是假设它没有安装,我从源代码编译了libjpeg 8.这最终出现在我的/ usr/local/lib /目录中.我清除了我的Buildout文件并重建了所有内容.这次PIL编译时我有JPEG支持.但我去了Django Admin并尝试通过ImageField上传JPEG而没有运气.我收到了"上传有效图片.您上传的文件不是图片或损坏的图片"错误.就像测试一样,我打开了一个Djano shell并执行以下操作:
> import Image
> i = Image.open( "/absolute_path/file.jpg" )
> print i
<JpegImagePlugin.JpegImageFile image mode=RGB size=940x375 at 0x7F908C529BD8>
Run Code Online (Sandbox Code Playgroud)
这样运行没有错误,并显示PIL能够打开JPEG.
在做了一些阅读之后,我遇到了这个帖子: 是否可以控制apache使用哪些库?
看起来PHP也使用libjpeg并在Django之前加载,因此之前加载libjpeg 6.2.这是在使用lsof时显示的:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 2561 www-data mem REG 202,1 146032 639276 /usr/lib/libjpeg.so.62.0.0
Run Code Online (Sandbox Code Playgroud)
所以我的想法是我应该使用libjpeg 6.2.所以我删除了位于/ usr/local/lib目录下的libjpeg .重新阅读PIL安装说明后,我意识到我可能没有PIL需要的libjpeg的dev/header文件.所以我也使用aptitude uninstaller(sudo aptitude remove libjpeg62)卸载了libjpeg .然后为了确保我得到了PIL需要的头文件,我使用aptitude安装了libjpeg:(sudo aptget install libjpeg62-dev).
从这里我清理了我的Buildout目录,然后重新构建Buildout,然后重新安装PIL.我再次获得JPEG支持,现在使用libjpeg62.
所以我去Django Admin进行测试.仍然没有JPEG支持.所以我想测试一般的JPEG支持,看看是否没有处理异常,它会抛出什么样的错误.所以在我的主页视图中,我添加了以下代码来打开JPEG图像:
import Image
i = Image.open( "/absolute_path/file.jpg" )
v = i.verify()
Run Code Online (Sandbox Code Playgroud)
然后我将i传递给HTML视图,以便轻松查看输出.我将这些更改部署到服务器并重新启动.我很惊讶没有看到错误并获得以下输出:
{{ i }} - <JpegImagePlugin.JpegImageFile image mode=RGB size=940x375 at 0x7F908C529BD8>
{{ v }} - None
Run Code Online (Sandbox Code Playgroud)
所以在这一点上我真的很困惑:
任何帮助将不胜感激,我已经在这2天调试没有运气.
设置:1.Rackspace Cloud Server 2. Ubuntu 10.04 3. Django 1.2.3(通过Buildout安装)4.PIL 1.1.7(通过Buildout安装)5.libjpeg 6.2(通过aptitude安装(sudo aptget install libjpeg62-dev)
去图,我会在发布后5分钟解决这个问题.我不确定真正的问题最终是什么,但这就是我解决它的方式.
自从使用aptitude安装libjpeg后,我开始尝试使用Aptitude而不是Buildout安装PIL.
我最终做的是:
sudo apt-get install libjpeg62-dev
sudo apt-get install python-imaging
Run Code Online (Sandbox Code Playgroud)
然后我从Buildout中删除了PIL,重新构建了我的项目并且它工作正常.既然PIL和libjpeg是通过Aptitude安装的,那么好像这解决了PIL找到libjpeg的任何问题.
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |