美文网首页
imread函数如何读取流数据

imread函数如何读取流数据

作者: DOGWiT | 来源:发表于2019-02-26 23:28 被阅读0次

    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函数如何读取流数据

          本文链接:https://www.haomeiwen.com/subject/gustuqtx.html