python - PIL 无法识别 io.BytesIO 对象的图像文件

标签 python pillow bytesio

我正在使用 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/

相关文章:

python - numpy 中 3D 数组的 axis = 3?

keras - 停止迭代 : Could not import PIL. 图像。 `array_to_img`的使用需要PIL

python - 从字节文件中打开 PIL 图像

python - 使用 io.BytesIO 从 azure 存储读取图像?

python - BytesIO - 从 s3 下载文件对象但字节流为空

python - 通过 Flask 和 BytesIO 显示来自 S3 的文件(图像)

python - 0 keras自定义层中的训练参数

python - 在小部件中存储自定义信息,gobject-introspect

python - 使用 Tkinter 在未知长度的可迭代中为每个项目创建一个条目

python-imaging-library - 显示 ImportError : cannot import name 'Template' while Using from PIL import Image