imread函數(shù)如何讀取流數(shù)據(jù)

Python的許多圖像庫里面有個函數(shù)叫imread - Ref:Python的各種imread函數(shù)在實現(xiàn)方式和讀取速度上有何區(qū)別?,這個函數(shù)傳入的參數(shù)是fname,也就是文件名或URL路徑。可以說,算是相當友好了。

但是,我今天碰到的問題是這樣的,Client發(fā)送一張圖片到Server上進行處理,圖片的內(nèi)容已經(jīng)在消息包里面了,格式是Bytes,這種時候,如果調(diào)用imread,就需要先把消息流存為本地文件,然后根據(jù)文件名調(diào)用imread函數(shù),有種脫褲子放屁的感覺,而且性能肯定受影響。

研究了好久,包括PIL.Image.frombytes函數(shù)等,最后找到個比較好的解決方法。
使用StringIO/BytesIO。

介紹一下,Python在內(nèi)存中讀寫數(shù)據(jù),用到的模塊是StringIO和BytesIO。StringIO操作的是string,BytesIO操作的二進制數(shù)據(jù)。 如果你需要對獲取到的數(shù)據(jù)進行操作,但是你并不想把數(shù)據(jù)寫到本地硬盤上,這時候你就可以用stringIO。

from PIL import Image
from io import BytesIO

image_path="E:/Python/a.png"

def read_file( path ):
    with open( path, "rb+" ) as f:
        stream = f.read()
    return stream

stream = read_file( image_path )

image=Image.open(BytesIO(stream))
print( image )

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,804評論 0 10
  • python學(xué)習(xí)筆記 聲明:學(xué)習(xí)筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學(xué)習(xí)學(xué)習(xí)的,另外根據(jù)自己平時的積累進行修正...
    renyangfar閱讀 3,083評論 0 10
  • IO在計算機中是指input/output,也就是輸入和輸出。由于程序和運行時數(shù)據(jù)是在內(nèi)存中駐留,由CPU這個超快...
    Sun_atom閱讀 1,714評論 0 0
  • 文:而立虛云 1.對于電氣設(shè)備公司的電氣產(chǎn)品如何監(jiān)控,應(yīng)該考慮到公司所處的具體市場環(huán)境。如果環(huán)境非常單一,就要考慮...
    通靈半藏閱讀 182評論 0 0
  • 因為以前教我們唱歌的謝老師身體不好,去上海做手術(shù)了,我們也有幾個星期沒有學(xué)了。今天來了一個新的老師,楊老師來給我們...
    杰西恩倍媽媽閱讀 164評論 0 0