Image.fromarray是否仅支持numpy.array?函数调用报错原因咨询
PIL与Numpy数组转换的AttributeError问题解析
问题原因
你碰到的AttributeError: 'bytes' object has no attribute '__array_interface__'报错,核心原因是传给img_arrayPIL的参数不是numpy数组,而是bytes对象。
你认为img_PIL(path)和img_arrayPIL(img_PILarray(path))等价,逻辑上确实没错,但实际运行有差异,大概率是因为你把img_PILarray的返回值存到变量后,这个变量被意外改成了bytes类型——比如不小心执行了类似arr = arr.tobytes()的代码,把原本的numpy数组转成了字节流,再传入img_arrayPIL就会触发报错。
而img_PIL函数是直接把np.array(Image.open(path))的结果传给Image.fromarray,中间没有变量存储环节,自然不会被修改,所以能正常运行。
解决步骤
- 确认变量类型:调用
img_arrayPIL前先打印变量类型,快速排查问题:arr = img_PILarray(path) print(type(arr)) # 正常应该输出 <class 'numpy.ndarray'>,如果是bytes类型就说明变量被篡改了 - 检查变量修改逻辑:查看赋值变量后到调用函数之间的代码,有没有把数组转字节、读取文件字节这类操作,避免误修改变量值。
- 临时替代方案:如果暂时找不到问题点,可以直接用链式调用跳过变量存储:
img_arrayPIL(img_PILarray(path))
内容的提问来源于stack exchange,提问作者gravy
相关产品推荐
相关产品推荐

