我在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
答案 0 :(得分:4)
使用jpeg
而不是jpg
作为格式标识符。
答案 1 :(得分:2)
感谢@jterrace建议自制。
解决方案:
Install homebrew
brew install python
brew install pil
答案 2 :(得分:1)
看来你必须采取一些额外的步骤,在Mac OSX上使用JPG和PIL。
我找到了一些链接,但你在谷歌上找不到任何东西:
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位的乐趣!)