2015-06-29 2 views
2

Я использую следующий код для извлечения изображений в Интернете:StringIO не может идентифицировать ошибки Изображение файла

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

Если вы сохранили 'img' в файле -' open ("foo.jpg", "w"). Write (img) '- можете ли вы открыть этот файл с помощью средства просмотра изображений? Или это также коррумпировано? –

+0

@DavidWolever Я использую терминал для управления удаленным сервером, поэтому я не могу проверить, могу ли я открыть его с помощью средства просмотра изображений. Но я попробовал ваш совет, и я могу сохранить его как файл в формате jpg. –

+0

@DavidWolever И правильный URL, я могу открыть его и увидеть изображение в браузере. –

ответ

2

Я только что установил подушку на почти свежий Ubuntu 14.04, используя pip install 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

Вы должны перемотать StringIO объект - просто называют im.seek(0) как перед вашим проверить, и перед тем Image.open (и не передать им к нему, а также - нет необходимости создать другой объект StringIO);