Base64转图片触发UnidentifiedImageError错误,求解决方法
Base64转图片时UnidentifiedImageError的解决方法
问题代码
import base64 from PIL import Image as pl file = open('C:\Users\test\Desktop\Sayac_Okuyucu\sayac_okuyucu\app\rawdata.txt', 'rb') encoded_data = file.read() file.close() # readind byte raw data b = base64.b64decode(encoded_data) val = io.BytesIO(b) img = pl.open(fp=val, mode='r') # ERROR IS HERE img.save("test.jpeg")
错误信息
已触发异常:UnidentifiedImageError
无法识别图片文件 <_io.BytesIO object at 0x0000012D61FB1CC0>
解决步骤
- 补全缺失模块:代码使用了
io.BytesIO但未导入io模块,需在开头添加import io - 修复路径转义问题:Windows路径中的反斜杠会被解析为转义字符(如
\t),改用原始字符串或转义反斜杠:# 原始字符串写法 file = open(r'C:\Users\test\Desktop\Sayac_Okuyucu\sayac_okuyucu\app\rawdata.txt', 'rb') # 或转义反斜杠写法 file = open('C:\\Users\\test\\Desktop\\Sayac_Okuyucu\\sayac_okuyucu\\app\\rawdata.txt', 'rb') - 清理Base64数据:确保
rawdata.txt中仅包含纯净的Base64编码内容,无换行、空格或data:image/jpeg;base64,这类前缀。若有前缀,需先截取编码部分:encoded_data = encoded_data.decode().split(',')[-1].encode() - 验证解码后的数据:先将解码后的字节直接写入文件,确认是否为有效图片:
若该文件能正常打开,再尝试用PIL读取;若不能,说明Base64数据本身无效。with open('test_raw.jpg', 'wb') as f: f.write(b)
修正后的完整代码
import base64 import io from PIL import Image as pl # 使用原始字符串路径,同时用with语句自动管理文件 with open(r'C:\Users\test\Desktop\Sayac_Okuyucu\sayac_okuyucu\app\rawdata.txt', 'rb') as file: encoded_data = file.read() # 处理可能存在的data URI前缀 encoded_str = encoded_data.decode().strip() if encoded_str.startswith('data:image'): encoded_str = encoded_str.split(',')[-1] encoded_data = encoded_str.encode() # 解码并保存图片 b = base64.b64decode(encoded_data) with io.BytesIO(b) as val: img = pl.open(val) img.save("test.jpeg")
内容的提问来源于stack exchange,提问作者Hasan Berat
相关产品推荐
相关产品推荐

