2017-02-16 3 views
1

Wir könnten Modul zipfile.ZipFile und PIL.Image.open kombinieren, um das Bild aus der komprimierten Datei zu lesen. Möglicherweise erhalten wir jedoch einen Fehler io.UnsupportedOperation: seek, nachdem wir PIL.Image.open aufrufen. Es bezieht sich auf die Bedingung, dass ich wie unten ein ZipExtFile Objekt PIL.Image.open Funktion übergeben:Konvertieren Sie Bilder in einer komprimierten Datei wie einer Zip-Datei in numpy Array in Python

from zipfile import ZipFile 
from PIL import Image 

zipf = ZipFile(path, "r") 

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

img = Image.open(f) 

So, wie das Problem zu beheben?

Antwort

1

Eigentlich könnten wir dieses Problem lösen, indem wir den Inhalt des Bildes lesen und dann in cStringIO Puffer umwandeln. Der Code ist unten:

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

Sie die modernere verwenden sollten [io.BytesIO] (https://docs.python.org/3/library/io.html#io.BytesIO). Auf diese Weise wird Ihr Code auf Python 3 und Python 2 funktionieren. –

+0

Ich habe BytesIO getestet und es hat auch funktioniert. Vielen Dank. –

Verwandte Themen