flask后端接受图片文件数据

1 代码

@app.route('/predict', methods=['POST'])
def predict():

    # 获取传送过来的完整原始图像
    file = request.form.get('file')
    print('file type', type(file))
    data_url = str.split(file, ',')[1]
    print('data_url type:', type(data_url))
    print('data_url:', data_url)

    img_data = base64.urlsafe_b64decode(data_url + '=' * (4 - len(data_url) % 4))
    print('type data 1:', type(img_data))
    img_data = np.frombuffer(img_data, np.uint8)
    print('type data 2:', type(img_data))
    img_arr = cv2.imdecode(img_data, cv2.IMREAD_COLOR)
    print('type data 3:', type(img_data))
    cv2.imwrite("./uploadImages/" + str(time()) + "_img.png", img_arr)

2 代码说明

接受文件数据最重要的是对各种文件数据类型的处理,先贴一下上述代码的运行结果:
在这里插入图片描述
在这里插入图片描述
处理过程:
1)从结果可以看出,flask后端接受的’file’为字符串形式,即对应的是base64编码的图片文件地址url;
2)需要注意的是使用base64编码的图片URL地址,其内容不是单纯的图片数据,还包括一个代表base64编码信息的文件头,如下图中的红色方框中圈出来的部分所示所以需要从这个URL中提取图片数据的部分,而丢弃这部分没用的文件头,具体做法就是通过定位“,”来将这个URL划分为文件头和文件数据两部分,这里只需要后面一部分就可以了
在这里插入图片描述
3)在得到图片纯数据URL之后,我们需要对其进行base64的解码,解码的结果是bytes类型
4)使用np.frombuffer(data, 数据类型)这种方式将bytes类的数据按照给定的数据类型进行解析,这样得到的数据类型是numpy数组类型,这里的numpy数组的shape是一维的!!!
5)cv2.imdecode的用法是从指定的内存缓存中读取数据,并将数据转化为图片格式,通常用于从网络数据中恢复图像。
在这里插入图片描述

备注:个人觉得这里的(5)不一定需要,但是一时也找不到当时参考的那篇博文了。

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值