PIL open() method not working with BytesIO

倾然丶 夕夏残阳落幕 提交于 2019-12-28 02:56:09

问题


For some reason, when I try to make an image from a BytesIO steam, it can't identify the image. Here is my code:

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))

And the stack trace of the error it throws:

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>

I am using the Pillow implementation of PIL.


回答1:


Think of BytesIO as a file object, after you finish writing the image, the file's cursor is at the end of the file, so when Image.open() tries to call output.read(), it immediately gets an EOF.

You need to add a output.seek(0) before passing output to Image.open().



来源:https://stackoverflow.com/questions/23587426/pil-open-method-not-working-with-bytesio

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!