imread函数如何读取流数据

Python的许多图像库里面有个函数叫imread - Ref:Python的各种imread函数在实现方式和读取速度上有何区别?,这个函数传入的参数是fname,也就是文件名或URL路径。可以说,算是相当友好了。

但是,我今天碰到的问题是这样的,Client发送一张图片到Server上进行处理,图片的内容已经在消息包里面了,格式是Bytes,这种时候,如果调用imread,就需要先把消息流存为本地文件,然后根据文件名调用imread函数,有种脱裤子放屁的感觉,而且性能肯定受影响。

研究了好久,包括PIL.Image.frombytes函数等,最后找到个比较好的解决方法。
使用StringIO/BytesIO。

介绍一下,Python在内存中读写数据,用到的模块是StringIO和BytesIO。StringIO操作的是string,BytesIO操作的二进制数据。 如果你需要对获取到的数据进行操作,但是你并不想把数据写到本地硬盘上,这时候你就可以用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 )

你可能感兴趣的:(imread函数如何读取流数据)