为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Python 中显示表示为字节数组的图像而不将其写入文件?

如何在 Python 中显示表示为字节数组的图像而不将其写入文件?

www说 2023-09-12 16:50:15
我已成功通过套接字发送图像,并且在接收端,我拥有与发送的图像文件完全相同的原始字节。这意味着,如果我将这些字节二进制写入文件,我将获得与发送的文件相同的文件。我尝试在不先保存的情况下显示来自 Python 的图像,但我在这样做时遇到了麻烦。如果我理解正确,matplotlib.imread()则需要文件的路径,然后将该文件解码为多个矩阵。做这样的事情效果很好:import matplotlib.pyplot as pltimport matplotlib.image as mpimg# data is the image data that was received from the socketfile = open("d:\\image.png", 'wb')file.write(data)file.close()img = mpimg.imread("d:\\image.png")plt.imshow(img)plt.show()显然我应该为此使用临时文件,但我编写它只是为了示例。如果我已经有了这些字节,有什么方法可以在不事先调用的情况下调用imshow()和show()方法吗?imread()
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

如果您可以直接从套接字读取数据,则可以使用 将套接字转换为文件对象,然后像使用常规文件一样makefile()提供套接字。imread读取时记得设置编解码器:


import matplotlib.pyplot as plt

import matplotlib.image as mpimg


# don't read from your socket, instead, call this where you would call read

fp = your_socket.makefile()


with fp:

    img = mpimg.imread(fp, format='jpeg')

plt.imshow(img)

plt.show()


我已经搜索过,但找不到直接从 matplotlib 中的字节解码图像的方法。如果由于已经有了 bytes 数组而无法使用上述解决方案,则可以使用BytesIO创建临时缓冲区:


import matplotlib.pyplot as plt

import matplotlib.image as mpimg

import io


fp = io.BytesIO(data)


with fp:

    img = mpimg.imread(fp, format='jpeg')

plt.imshow(img)

plt.show()


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信