python映像库无法将PNG保存到JPG

时间:2011-11-17 18:06:57

标签: python image python-imaging-library

我在Mac OSX上从源代码安装了PIL 1.1.7。 我还安装了Macports所需的库。 使用python 2.6。

安装PIL后,我可以成功运行selftest.py(所有测试通过)

但是当我尝试运行以下代码时,我发现我无法将PNG转换为JPG。然而,我能够将PNG转换为GIF,PNG转换为PPM。我也可以阅读JPG。

import os
import sys 
import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    print outfile
    if infile != outfile:
        try:
            Image.open(infile).save(outfile, 'jpg') #Note: gif or ppm works
        except IOError:
            print "cannot convert", infile
            if os.path.exists(outfile):
               print 'cleaning up...'
               os.remove(outfile)

**使用堆栈跟踪进行更新。看起来像编码器丢失了。不过我确实通过macport安装了libjpeg。

清理......

Traceback (most recent call last):
  File "convert_to_jpeg.py", line 15, in <module>
    Image.open(infile).save(outfile, 'jpeg')
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/Image.py", line 1439, in save
    save_handler(self, fp, filename)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/JpegImagePlugin.py", line 471, in _save
    ImageFile._save(im, fp, [("jpeg", (0,0)+im.size, 0, rawmode)])
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/ImageFile.py", line 495, in _save
    e = Image._getencoder(im.mode, e, a, im.encoderconfig)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/Image.py", line 401, in _getencoder
    raise IOError("encoder %s not available" % encoder_name)
IOError: encoder jpeg not available

4 个答案:

答案 0 :(得分:4)

使用jpeg而不是jpg作为格式标识符。

答案 1 :(得分:2)

感谢@jterrace建议自制。

解决方案:

Install homebrew 
brew install python 
brew install pil

答案 2 :(得分:1)

看来你必须采取一些额外的步骤,在Mac OSX上使用JPG和PIL。

我找到了一些链接,但你在谷歌上找不到任何东西:

http://websaucesoftware.com/uncategorized/getting-pil-installed-on-os-x-10-6-snow-leopard-with-jpeg-support

http://code.davidjanes.com/blog/2009/11/16/pil-libjpeg-jpeg-and-mac-osx-snow-leopard/

答案 3 :(得分:1)

你正在播放我的歌。

在我登陆此链接之前,我在PIL中与JPEG支持进行了数周的斗争:http://proteus-tech.com/blog/cwt/install-pil-in-snow-leopard/

这是唯一有效的方法。我的卸载和重新安装过程的详细信息如下:http://www.thetoryparty.com/2010/08/31/pil-on-snow-leopard-_jpeg_resync_to_restart-error/

我所做的总结:

1)强制gcc和gcov路径为4.2(它们已设置为4.0以安装MySQLdb)

2)在我的.profile中,注释掉了我曾经踢过的某些ARCHFLAGS线(可能是可选步骤?)

3)通过我的系统选择删除一切称为“libjpeg”,“PIL”或“Imaging”的东西 - 清理房屋

4)按照上述proteus-tech链接的步骤,从下载新的libjpeg开始。

祝你好运!你可以做到!

(PS:请注意,如果您从selftest.py获得错误 - 特别是“IOError:读取图像文件时解码错误” - 并且您无法加载JPEG,那么这是一个过程解决了这个问题:

http://www.thetoryparty.com/2011/04/07/pil-and-jpeg-decoding-error-the-revenge/如果您以后遇到更多麻烦,可能会感兴趣。

请注意,两个问题都与需要使用“-arch i386”构建的libjpeg有关,而不是“-arch x86_64”。这对你来说是64位的乐趣!)