当前位置:   article > 正文

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

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")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

二、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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

点击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中取名内容。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/653789
推荐阅读
相关标签
  

闽ICP备14008679号