【Postman】postman显示返回的base64图片,实现直接预览

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近在做项目的时候遇到了如下场景:C++编写的图像识别程序已经通过测试,需要编写一个python程序来调用C++程序,并且需要暴露一个接口给终端,response直接返回识别后的图像。


提示:以下是本篇文章正文内容,下面案例可供参考

一、python程序

思路:直接利用flask写接口,先写一个接口测试调用C++程序是否有正常返回,再写一个接口将图片转base64并放入responseBody中。
代码如下:

import base64
import io
import subprocess
from subprocess import PIPE
from flask import *
import cv2

app = Flask(__name__, template_folder="templates", static_folder="static")
app.config["SECRET_KEY"] = 'TPmi4aLWRbyVq8zu9v82dWYW1'


@app.route('/meterRead', methods=['POST', 'GET'])
def meter_read():
    # t = GetSellThread()
    # t.start()
    a = "det_model.xml"
    b = "seg_model.xml"
    c = request.args.get("imgPath")
    d = request.args.get("unit")
    e = "60.0"
    # ./meter_reader det_model.xml seg_model.xml ../data/m15.jpg 2.0 60.0
    s = subprocess.run(["./meter_reader", a, b, c, d, e], stdout=PIPE)
    print(s)
    return s.stdout.decode("utf-8")


@app.route('/resultImg')
def meter_img():
    a = "det_model.xml"
    b = "seg_model.xml"
    c = request.args.get("imgPath")
    d = request.args.get("unit")
    e = "60.0"
    # ./meter_reader det_model.xml seg_model.xml ../data/m15.jpg 2.0 60.0
    s = subprocess.run(["./meter_reader", a, b, c, d, e], stdout=PIPE)
    print(s)
    # image = cv2.imread("./results.jpg")
    # resp = make_response(image)
    # byte_stream = io.BytesIO(image)
    base64img = get_picture_base64_data("./results.jpg")
    resp = make_response(base64img)
    # resp.headers['Content-Type'] = 'image/jpeg'
    return resp


def get_picture_base64_data(image_path):
    with open(image_path, 'rb') as img_obj:
        base64_data = base64.b64encode(img_obj.read())
    return base64_data


if __name__ == '__main__':
    app.run(threaded=False, debug=True, port=8000, host="0.0.0.0")

二、postman进行接口测试

模拟终端输入参数,并将其填入param中,编写一下js脚本写入Tests中:

// 将接口返回数据,封装成自己需要的结构
var data = {
    response: pm.response.body
}
// html 模板字符
var template = `<html><img src="data:image/jpg;base64,{{response}}" /></html>`;

// 设置 visualizer 数据。传模板、解析对象。
pm.visualizer.set(template, data);

点击Send,执行效果如下:
在这里插入图片描述

要点总结

1.调用C++程序需要使用subprocess.run([“./meter_reader”, a, b, c, d, e], stdout=PIPE)这种拼接语句写法。
2.图片传输形式要想好是字节流还是base64的形式,并有对应的encode和decode方法。
3.数据放入response之后,要知道所需数据在其中的那个部分,header还是body,body是json形式的还是直接编码形式的。在写postman的tests脚本时,要注意data中为需要转换的直接内容,要搞清楚是response.json.xx还是response.body,template中标签渲染的内容为data中取名内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值