PIL.Image.open() выдает IOError: невозможно идентифицировать файл изображения

Я пытаюсь сохранить изображение jpg из формы приложения Flask. Следующий код работает нормально:

blob = request.files[canvas_key]
blob.stream.seek(0)
data = blob.stream.read()
string_io = cStringIO.StringIO(data)

string_io имеет тип <cStringIO.StringI object at 0x10bf2bf10>.

Тем не менее, когда я пытаюсь: Image.open(string_io), я получаю эту ошибку: IOError: cannot identify image file.

Использование stream.seek(0), кажется, решает эту проблему для других людей, но в моем случае это не так.


person Rose Perrone    schedule 03.06.2014    source источник
comment
Есть ли у потока HTTP-заголовок или это действительно JPEG? Есть ли в нем строка «JFIF» в первой дюжине байтов?   -  person johntellsall    schedule 04.06.2014
comment
Это префикс string_io: 'RIFF\xa2_\x00\x00WEBPVP8', что имеет смысл, потому что я получаю изображение из 'image/webp, and "In 2010 Google introduced the WebP picture format, which uses RIFF as a container". This is the specific line of javascript that creates the image: var dataURL = canvas.toDataURL('image/webp');`   -  person Rose Perrone    schedule 04.06.2014
comment
Я не думаю, что WebP вообще существовал, когда PIL последний раз обновлялся.   -  person Mark Ransom    schedule 04.06.2014
comment
чтобы опираться на комментарий @Marks, переключитесь на библиотеку Pillow. Это обновляемая вилка PIL, поддерживающая WebP -- pypi.python.org/ pypi/Подушка/2.0.0   -  person johntellsall    schedule 04.06.2014


Ответы (1)


Благодаря @Mark я изменил тип изображения, которое я снимаю, с WebP на PNG.

person Rose Perrone    schedule 03.06.2014