创建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方式读取图片
