把其它语言(如C#)传来的base64字符串(图片文件字节数组转换而来)转成python的图片对象

网上看到的很多文章介绍转成python图片对象的都是通过读取图片文件转换而来,但是并不是所有的业务逻辑都能通过读取图片文件的,如我的客户端使用C#语言动态拍摄图片并传到服务端给python处理,这样服务端的python就不能通过以读取图片的方式创建图片对象了(平时都是使用C#开发,python不是很熟悉,可能有些描述不是很到位,勿喷)

我想要实现的大概的业务流程是:

客户端(C#或者使用其它语言)把图片转成字节数组,并把字节数组转成Base64String的字符串,通过rpc(C#的可以参考我前面写的文章:https://blog.csdn.net/zxy13826134783/article/details/102977028)技术发送字符串给python处理,你可能会有疑惑,为什么字节数组要转成Base64String的字符串,直接传递字节数组岂不是更好?我尝试过了,不能直接传递字节数组,可能是语言之间的不兼容

至于使用C#把图片转成字节数组,并把字节数组转成Base64String的字符串的步骤就省略了,本文通过python的方式读取图片文件并转成Base64String的字符串进行模拟客户端产生Base64String的字符串

全部代码如下:

#下面哪些库没有安装的需要自己安装一下,我使用anaconda安装的python,所以我不用额外手动装库
import base64
import matplotlib.pyplot as plt
import io
import os
from PIL import Image          

#  读取图片函数,filePath是图片的路径,模拟客户端的代码
def ReadImage(filePath):
    f=open(filePath,"rb")
    #根据图片文件的大小定义字节数组
    buf=bytearray(os.path.getsize(filePath))
    #把读入的数据填充到数组中
    f.readinto(buf)
    f.flush()
    f.close()
    return buf



#显示图片,输入参数img_b64encode为字节数组编码过的编码字符串,你可以通过其它语言通过rpc远程的方式进行调用并传入base64的字符串
def ShowImage(img_b64encode):
 
    #把已经编码的字符串转成解码的字符串
    img_base64=base64.b64decode(img_b64encode)
    img=io.BytesIO(img_base64)
    #把img对象转成图像类型的对象imgage,到了这里,你可以随便折腾它了
    image=Image.open(img)
    #显示图片,这一步仅仅是为了测试是否成功地把自己编码字符串转成图像类型的对象
    plt.imshow(image)

#主程序入口   
if __name__=="__main__":
    buf=ReadImage("./TestData/test.png")
    #字节数组编码成编码字符串
    img_b64encode = base64.b64encode(buf)
    #这一步你可以通过rpc远程调用,上两步都是为了准备数据
    ShowImage(img_b64encode)

运行结果如下:

发布了66 篇原创文章 · 获赞 48 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/zxy13826134783/article/details/103483651