我正在运行 Debian 6 并且最近安装了 PIL。
我已经预装了 zlib 和 jpeg 库,它们都在 /usr/lib
安装时,setup.py 文件找到库,我得到标准:
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.7.3 (default, Jun 29 2012, 22:38:23)
[GCC 4.4.5]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
zlib 和 jpeg 正在按预期工作。运行 selftest.py 也成功
--------------------------------------------------------------------
PIL 1.1.7 TEST SUMMARY
--------------------------------------------------------------------
Python modules loaded from ./PIL
Binary modules loaded from ./PIL
--------------------------------------------------------------------
--- PIL CORE support ok
*** TKINTER support not installed
--- JPEG support ok
--- ZLIB (PNG/ZIP) support ok
--- FREETYPE2 support ok
--- LITTLECMS support ok
--------------------------------------------------------------------
Running selftest:
--- 57 tests passed.
所以到目前为止,我们都很高兴。
只是为了确保,我们运行 python 并测试 zlib 解码器是否有效
Python 2.7.3 (default, Jun 29 2012, 22:38:23)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zlib
>>> a=zlib.compress('hello world')
>>> print zlib.decompress(a)
hello world
所以,它有效。
但是,当我尝试保存图像时:
>>> import Image
>>> i = Image.open('a.png')
>>> i.save('b.png')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/PIL/Image.py", line 1406, in save
self.load()
File "/usr/local/lib/python2.7/site-packages/PIL/ImageFile.py", line 189, in load
d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
File "/usr/local/lib/python2.7/site-packages/PIL/Image.py", line 385, in _getdecoder
raise IOError("decoder %s not available" % decoder_name)
IOError: decoder zip not available
如果我尝试另存为 jpeg,则会出现同样的错误(除了 jpeg 解码器不可用)
如果我检查 Image.core,我发现实际上没有 zip_decoder 和 jpeg_decoder 属性。
>>> dir(Image.core)
['__doc__', '__file__', '__name__', '__package__', 'bit_decoder', 'blend', 'convert',
'copy', 'crc32', 'draw', 'effect_mandelbrot', 'effect_noise', 'eps_encoder', 'fill',
'fli_decoder', 'font', 'getcodecstatus', 'getcount', 'gif_decoder', 'gif_encoder',
'hex_decoder', 'hex_encoder', 'linear_gradient', 'map_buffer', 'msp_decoder', 'new',
'open_ppm', 'outline', 'packbits_decoder', 'path', 'pcd_decoder', 'pcx_decoder',
'pcx_encoder', 'radial_gradient', 'raw_decoder', 'raw_encoder', 'sun_rle_decoder',
'tga_rle_decoder', 'tiff_lzw_decoder', 'wedge', 'xbm_decoder', 'xbm_encoder']
正如我所见,我无法找出它是什么,即使它在安装时找到了正确的库(所以安装程序找不到库不是问题,它找到了它们),核心对象是在没有适当的解码器。
多次尝试重新安装 PIL,检查 /usr/lib 目录和 .so 文件的权限。以 root 身份运行 PIL 以查看是否存在任何问题。但仍然没有答案。
如果有人可以帮助解决这个问题,那就太好了!
提前致谢。
布鲁诺