You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PIL打开BytesIO对象时报UnidentifiedImageError无法识别图片问题

问题根因

  • 你对io.BytesIO的用法存在误解:io.BytesIO接收的参数是图片本身的二进制数据,而非本地文件路径编码后的字节。你当前代码中把路径字符串编码后传入io.BytesIO,生成的流里存储的是路径文本的字节,根本不是图片内容,因此PIL无法识别为合法图片,触发UnidentifiedImageError。
  • 去掉str.encode后报错的原因是io.BytesIO本身只接受字节类型的输入,直接传入字符串类型的路径自然会触发类型错误,两个报错本质都是用法逻辑错误。

解决方法

分两种使用场景选择即可:

场景1:仅读取本地图片展示

无需额外调用io.BytesIO,直接把本地路径传入Image.open即可,代码最简:

from PIL import Image 

img1 = Image.open('D:/Downloads/imagens/0b4d4db99a7b8ecba24909d277556de8.png')
img1.show()

场景2:确实需要通过字节流处理图片(比如后续要处理网络下载的图片字节、内存中生成的图片等)

先读取本地图片的二进制内容,再传入io.BytesIO生成流对象:

import io
from PIL import Image 

# 以二进制模式读取本地图片内容
with open('D:/Downloads/imagens/0b4d4db99a7b8ecba24909d277556de8.png', 'rb') as f:
    img_binary = f.read()

file = io.BytesIO(img_binary)
img1 = Image.open(file)
img1.show()

内容的提问来源于stack exchange,提问作者Rafael Rocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:45:04