2017-02-16 15 views
1

Мы могли бы объединить модули zipfile.ZipFile и PIL.Image.open, чтобы прочитать изображение из сжатого файла. Однако мы можем получить сообщение об ошибке io.UnsupportedOperation: seek после того, как мы позвоним PIL.Image.open. Это относится к условию, что я прошел ZipExtFile объект в PIL.Image.open функции, как показано ниже:Преобразование изображений в сжатом файле, таком как zip-файл, в массив numpy в python

from zipfile import ZipFile 
from PIL import Image 

zipf = ZipFile(path, "r") 

f = zipf.open("test.jpg") 

img = Image.open(f) 

Итак, как решить эту проблему?

ответ

1

На самом деле мы могли бы решить эту проблему, прочитав содержимое изображения, а затем преобразуем его в буфер cStringIO. Код ниже:

from zipfile import ZipFile 
from PIL import Image 

zipf = ZipFile(path, "r") 

# read instead of open 
content = zipf.read("test.jpg") 

img = Image.open(cStringIO.StringIO(content)) 
+1

Вы должны использовать более современные [io.BytesIO] (https://docs.python.org/3/library/io.html#io.BytesIO). Таким образом, ваш код будет работать на Python 3 и Python 2. –

+0

Я тестировал BytesIO, и он тоже работал. Благодарю. –