我正在使用 PIL 的 Pillow fork 并不断收到错误
OSError: cannot identify image file <_io.BytesIO object at 0x103a47468>
尝试打开图像时。我在 python 3.4 中使用 virtualenv,没有安装 PIL。
我试图根据其他遇到同样问题的人找到解决方案,但是,这些解决方案对我不起作用。这是我的代码:
from PIL import Image
import io
# This portion is part of my test code
byteImg = Image.open("some/location/to/a/file/in/my/directories.png").tobytes()
# Non test code
dataBytesIO = io.BytesIO(byteImg)
Image.open(dataBytesIO) # <- Error here
图像存在于文件的初始打开中,并被转换为字节。这似乎对几乎所有其他人都有效,但我不明白为什么它对我不起作用。
编辑:
dataBytesIO.seek(0)
不能作为解决方案(试过),因为我没有通过流保存图像,我只是用数据实例化 BytesIO,因此(如果我没有想错的话)seek 应该已经是在 0。
最佳答案
(此解决方案来自作者本人,我只是将其移至此处。)
解决方案:
# This portion is part of my test code
byteImgIO = io.BytesIO()
byteImg = Image.open("some/location/to/a/file/in/my/directories.png")
byteImg.save(byteImgIO, "PNG")
byteImgIO.seek(0)
byteImg = byteImgIO.read()
# Non test code
dataBytesIO = io.BytesIO(byteImg)
Image.open(dataBytesIO)
问题在于 Image.tobytes()
返回字节对象的方式。它似乎是无效数据,并且“编码”只能是原始数据,它似乎仍然输出错误数据,因为几乎每个字节都以 \xff\
格式出现。然而,通过 BytesIO 保存字节并使用 .read()
函数读取整个图像给出了正确的字节,以后需要时可以实际使用。
关于python - PIL 无法识别 io.BytesIO 对象的图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31077366/