2014-05-10 13 views
12

Aus irgendeinem Grund, wenn ich versuche, ein Bild von einem BytesIO-Dampf zu machen, kann es das Bild nicht identifizieren. Hier ist mein Code:PIL open() -Methode arbeitet nicht mit BytesIO

from PIL import Image, ImageGrab 
from io import BytesIO 

i = ImageGrab.grab() 
i.resize((1280, 720)) 
output = BytesIO() 
i.save(output, format = "JPEG") 
output.flush() 
print(isinstance(Image.open(output), Image.Image)) 

Und der Stack-Trace des Fehlers wirft:

Traceback (most recent call last): 
    File "C:/Users/Natecat/PycharmProjects/Python/test.py", line 9, in <module> 
    print(isinstance(Image.open(output), Image.Image)) 
    File "C:\Python27\lib\site-packages\PIL\Image.py", line 2126, in open 
    % (filename if filename else fp)) 
IOError: cannot identify image file <_io.BytesIO object at 0x02394DB0> 

ich die Kissen Implementierung von PIL verwenden.

Antwort

20

Denken Sie an BytesIO als Dateiobjekt, nachdem Sie das Bild fertig geschrieben haben, befindet sich der Cursor der Datei am Ende der Datei. Wenn Image.open() versucht, output.read() aufzurufen, wird sofort ein EOF ausgegeben.

Sie müssen einen output.seek(0) hinzufügen, bevor Sie output an Image.open() übergeben.