2014-05-10 10 views
12

Z jakiegoś powodu, kiedy próbuję zrobić obraz z pary BytesIO, nie mogę zidentyfikować obrazu. Tu jest mój kodu:Metoda PIL open() nie działa z 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)) 

I ślad stosu błędu rzuca:

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> 

Używam wdrażania poduszka PIL.

Odpowiedz

20

Pomyśl o BytesIO jako obiekcie pliku, po zakończeniu zapisywania obrazu, kursor pliku znajduje się na końcu pliku, więc gdy Image.open() próbuje zadzwonić pod numer output.read(), natychmiast otrzymuje EOF.

Musisz dodać przed przekazaniem output do Image.open().