亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 83 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號