我使用以下代码在线检索图像:
import Image
import urllib2
import cStringIO
url = 'http://storage.googleapis.com/bloomsky-img/k65x5Kvpyc3W08jBqJ1kqZqnnZapoQ==.jpg'
img = urllib2.urlopen(url).read()
# error occurred when executing the line below
im = Image.open(cStringIO.StringIO(img))
im.verify()
# must reload the image after verify method !!
im = Image.open(cStringIO.StringIO(img))
im.save('name', 'JPEG')
运行时,它会给我image not valid and error code is cannot identify image file <StringIO.StringIO instance at 0x7f6825b12e18>
错误。但是相同的代码在我的Mac上运行完美。只有当我将代码部署到Ubuntu服务器时,我才遇到这样的问题。我检查了文档,我想我正确地使用StringIO
。有人可以帮忙吗?非常感谢。
答案 0 :(得分:2)
我刚刚使用pip install Pillow
在几乎全新的Ubuntu 14.04上安装了Pillow。安装成功。但是,请查看安装摘要:
--------------------------------------------------------------------
PIL SETUP SUMMARY
--------------------------------------------------------------------
version Pillow 2.8.2
platform linux2 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2]
--------------------------------------------------------------------
*** TKINTER support not available
(Tcl/Tk 8.6 libraries needed)
*** JPEG support not available
*** OPENJPEG (JPEG2000) support not available
--- ZLIB (PNG/ZIP) support available
*** LIBTIFF support not available
*** FREETYPE2 support not available
*** LITTLECMS2 support not available
*** WEBP support not available
*** WEBPMUX support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
To check the build, run the selftest.py script.
changing mode of build/scripts-2.7/pilconvert.py from 644 to 755
changing mode of build/scripts-2.7/pildriver.py from 644 to 755
changing mode of build/scripts-2.7/pilfile.py from 644 to 755
changing mode of build/scripts-2.7/pilprint.py from 644 to 755
changing mode of build/scripts-2.7/pilfont.py from 644 to 755
changing mode of [...]
Successfully installed Pillow-2.8.2
在那边看*** JPEG support not available
?我认为那是关键...
答案 1 :(得分:1)
你必须回放你的stringIO对象 -
只需在验证前致电im.seek(0)
,
在Image.open
之前(并将im传递给它 - 没有必要
创建另一个stringIO对象);