使用BytesIO的PIL:无法识别图像文件

4

我正在尝试通过套接字连接发送图像以进行视频聊天,但是从字节格式重构图像的结果不正确。这是我的将图像转换为字节以进行发送的方式:

pil_im = Image.fromarray(img)
b = io.BytesIO()
pil_im.save(b, 'jpeg')
im_bytes = b.getvalue()
return im_bytes

这个发送没问题,但是我无法将这些字节重新格式化为图像文件。以下是我用于重新格式化以便显示的代码:

pil_bytes = io.BytesIO(im_bytes)
pil_image = Image.open(pil_bytes)
cv_image = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
return cv_image

第二行抛出以下异常:

无法识别图像文件<_io.BytesIO object at 0x0388EF60>

我查看了一些其他的线程(这个这个),但是没有解决方案对我有帮助。我还参考了这个来尝试自我纠正,但是对他们有效的东西对我来说似乎就不行。 非常感谢您能提供的任何帮助,并请原谅任何错误,我仍在学习Python。


你可以运行两个代码片段来测试固定图像,以确定网络通信代码是否存在问题。如果它能正常工作,那么你的网络代码就有问题了。 - Blender
1个回答

2

首先感谢您!因为您问题中的代码帮助我解决了第一部分问题。第二部分问题已经通过这个简单的代码解决了(不要转换为数组)。

dataBytesIO = io.BytesIO(im_bytes)
image = Image.open(dataBytesIO)

希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接