解决 Django 下 PIL 无法找到 Jpeg 解码器的问题

操作系统 Ubuntu 11.04 64位
Django 1.2.3
Python 2.7.1
VirtualEnv 1.4.9

问题描述

利用ImageField上传图片时总是出现
“请上传有效图片….”
英文信息是 “Upload a valid image. The file you uploaded was either not an image or a corrupted image.”

后检查发现是PIL问题,无法找到libjpeg,即便使用apt-get 重装libjpeg62-dev也无济于事,因为PIL 无法找到libjpeg。

最简单的办法,就是加一个软链接,把libjpeg的so文件链接到PIL能找到的地方,譬如/usr/lib

问题解决

1. 删除已有PIL

pip uninstall PIL

2. 安装libjepg-def(最好重装一遍)

sudo apt-get install libjpeg62-dev

3. 加软链接(libjpeg的路径是通过Ubuntu的Synaptic管理器找到的)

sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/libjpeg.so

可以顺便把libz也加上

sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/libz.so

4. 下载PIL,自己编译

python setup.py build_ext -i

结果中显示Jpeg和Zlib都已经找到了

--- JPEG support available
--- ZLIB (PNG/ZIP) support available

再 python setup.py install 即可正确安装

5. 最后通过Python命令行可以检验是否Jpeg解码器是否安装成功

>>> from PIL import _imaging as core
>>> core.jpeg_decoder
built -in function jpeg_decoder

最后是一个综合了以上步骤的脚本,请谨慎使用

#!/bin/sh

# remove existing PIL
pip uninstall PIL

# install libjpeg
sudo apt-get install libjpeg62-dev

# make soft links
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/libjpeg.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/libz.so

# download and install PIL
wget -c http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar xzvf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7
python setup.py build_ext -i
python setup.py install

# if no errors is thrown up, jpeg_decoder was installed successfully
echo "from PIL import _imaging as core; core.jpeg_decoder"|python

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。