创建POST、GET服务
功能介绍:
1、实现POST、GET服务
2、返回json结构数据
3、支持请求参数传入
4、支持base64图像传入,并转换成OpenCv Mat格式图像
5、支持OpenCv Mat格式图像转base64数据输出
Request请求对象的常用属性和方法
| 属性或方法 | 说明 | 
| args | 存储url请求中的查询参数,返回类似于字典的数据 | 
| method | 存储请求中使用的HTTP方法,例如GET或POST | 
| form | 存储请求提交的所有表单数据,返回类似于字典的数据 | 
| files | 存储请求上传的所有文件,返回类似于字典的数据 | 
| cookies | 存储请求的所有cookie,返回类似于字典的数据 | 
| host | 存储请求的域名 | 
| headers | 存储HTTP请求的请求头信息,返回类似于字典的数据 | 
| url | 存储客户端请求的完整URL | 
| path | 存储路由中的路径 | 
| base_url | 存储去掉GET参数的URL | 
| host_url | 存储只有主机和端口号的URL | 
| remote_addr | 存储请求的客户端地址 | 
测试源码如下:
import base64
import numpy as np
import cv2
from flask import request, Flask
from flask import jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app, resources=r'/*')
headers = {'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'}
def image_to_base64(image_np):
    image = cv2.imencode('.jpg', image_np)[1]
    image_code = str(base64.b64encode(image))[2:-1]
    return image_code
"""
Post URL:http://127.0.0.1:9003/ReadImage
功能:POST读取图片
参数:{"path": "out.jpg"}
"""
@app.route('/ReadImage', methods=['POST'])
def ReadImage():
    print(request.json)
    path = request.json.get('path')
    print("收到数据:", path)
    # Img转base64转码
    image = cv2.imread(path)
    image = cv2.resize(image, (int(image.shape[1] * 0.2), int(image.shape[0] * 0.2)), interpolation=cv2.INTER_NEAREST)
    image_code = image_to_base64(image)
    image_code = f'data:image/png;base64,{image_code}'
    return jsonify({'success': True, 'message': '成功', 'image': image_code})
"""
Post URL:http://127.0.0.1:9003/SaveImage
功能:POST传入base64图像,base64转mat, 并保存成jpg文件
"""
@app.route('/SaveImage', methods=['POST'])
def SaveImage():
    base64Img = request.json.get('base64Img')
    bases = base64Img.split(',')
    if len(bases) != 2:
        return jsonify({'success': False, 'message': 'base64图像格式错误'})
    # base64转码为Img
    img_b64decode = base64.b64decode(bases[1])
    img_array = np.fromstring(img_b64decode, np.uint8)
    image = cv2.imdecode(img_array, cv2.COLOR_RGB2BGR)
    # 保存Mat图像
    cv2.imwrite("save.jpg", image)
    return jsonify({'success': True, 'message': '成功'})
"""
Post URL:http://127.0.0.1:9003/GetImage
功能:GET读取图片
参数:{"path": "out.jpg"}
"""
@app.route('/GetImage', methods=['GET'])
def GetImage():
    # Img转base64转码
    path = request.args.get('path')
    print("GET路径:", path)
    image = cv2.imread(path)
    image = cv2.resize(image, (int(image.shape[1] * 0.2), int(image.shape[0] * 0.2)), interpolation=cv2.INTER_NEAREST)
    image_code = image_to_base64(image)
    image_code = f'data:image/png;base64,{image_code}'
    return jsonify({'success': True, 'message': '成功', 'image': image_code})
if __name__ == "__main__":
    app.run(
        host='127.0.0.1',
        port=9003,
        debug=False
    )
运行结果如下:

测试1:读取一张图片

测试2:保存一张图片

测试3:get方式读取图片
