Files
work-secretfile-selfcheck/UmiOCR-data/py_src/server/qrcode_server.py

128 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import json
import base64
from io import BytesIO
from .bottle import request
from ..mission.mission_qrcode import MissionQRCode
# 从base64识别二维码图片。传入data指令字典 {"base64", "options"}
# 返回字典 {"code", "data"}
def base2text(data):
base64 = data["base64"]
opt = data.get("options", {})
res = MissionQRCode.addMissionWait(opt, [{"base64": base64}])
return res[0]["result"]
# 从文本生成base64。传入data指令字典 {"text", "xxx"}
# 返回 {"code", "data"}
def text2base(data):
text = data["text"]
opt = data.get("options", {})
format = opt.get("format", "QRCode")
w = opt.get("w", 0)
h = opt.get("h", 0)
quiet_zone = opt.get("quiet_zone", -1)
ec_level = opt.get("ec_level", -1)
try:
pil = MissionQRCode.createImage(text, format, w, h, quiet_zone, ec_level)
buffered = BytesIO()
pil.save(buffered, format="JPEG")
b64 = base64.b64encode(buffered.getvalue()).decode("ascii")
res = {"code": 100, "data": b64}
except Exception as e:
res = {"code": 200, "data": f"[Error] {str(e)}"}
return res
# 路由函数
def init(UmiWeb):
@UmiWeb.route("/api/qrcode", method="POST")
def _qrcode():
try:
data = request.json
except Exception as e:
return json.dumps({"code": 800, "data": f"请求无法解析为json。"})
if not data:
return json.dumps({"code": 801, "data": f"请求为空。"})
if "base64" in data:
return json.dumps(base2text(data))
elif "text" in data:
return json.dumps(text2base(data))
return json.dumps({"code": 802, "data": '指令中不存在 "base64""text"'})
"""
// 文本 → 二维码base64
const url = "http://127.0.0.1:1224/api/qrcode";
const text = "测试文本";
const data = {
// 必填
"text": text,
// 选填
"options": {
"format": "QRCode", // 码类型
"w": 0, // 图像宽度0为自动设为最小宽度
"h": 0, // 图像高度
"quiet_zone": -1, // 码四周的空白边缘宽度,-1为自动
"ec_level": -1, // 纠错等级,-1为自动
}
};
fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => {
if(data.code === 100) {
console.log("生成二维码base64", data.data);
}
else {
console.log("生成二维码base64失败错误码", data.code, " 错误信息:", data.data);
}
})
.catch(error => {
console.error(error);
});
// 二维码base64 → 文本
const url = "http://127.0.0.1:1224/api/qrcode";
const base64 = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAdAB0BAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APU/GfjM+EjAzW9o0DW8txNPdXEkSxKkkMYAEcUjMS069hjBrn3+K0yi3B0/RozO52y3OtG3gaPy7WRWV5IVJO27DFSoIEbYycCrF18Sb2z1a20u70rTbO8uLiKzigutRl3NcNDBIyAxW7rhTcIu4sAcE8Cu00LU/wC2/D2mat5Pk/brSK58rdu2b0Dbc4GcZxnAri/iSdPGs6AuqySW+nzpcW11dg27xwIzQspkimikDIZUiG/5QhK5PzCuPI1qz8ISalajUtNu1czLGsxnt7tHhhhiijNmkSF22W8aFeFWZ2RjIjeVXvrq0t/EWmaTpq3d9rTXFpCqpa2iRW92sCJOUP2WZYjEsNszrG7Bd/GNhr2zQtP/ALI8PaZpuMfY7SK3x5nmY2IF+9tXd067Vz6DpXH/ABK1LVrN7SLTIr6622k159isYYnknkjuLVUI8yGXGzzWfhc5UHPFeeSyav4dtI9R8O+Ho5dYS4WNrSK1EV2sb29ncFJY7aOPzIkkYhjhSGaME7WdHy72y8NWthbfDxrrfDDdpdXH2eVvtIu/IcStcOUaCGFMqGKNKUELZDEsU+g/DUcMXhXSI7cRrAllCsYjIKhQgxgh3BGP9t/95upk1PQtH1vyv7W0qxv/ACc+X9rt0l2ZxnG4HGcDp6Co7Xw1oNiipaaJptuiPvVYbVEAbcjZGB13RxnPqin+EYksdC0fTIo4rDSrG0jjlM6JBbpGFkKlC4AHDFSVz1wcdKuQQQ2tvFb28UcMESBI441CqigYAAHAAHGK/9k="
const data = { "base64": base64 };
fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => {
if(data.code === 100) {
console.log("识别二维码成功!图片中的二维码数量:", data.data.length);
console.log("所有码的内容:");
for (let d of data.data) {
console.log(" 文本:", d.text);
console.log(" 格式:", d.format);
console.log(" 方向:", d.orientation);
console.log(" ====");
}
}
else {
console.log("识别二维码失败!错误码:", data.code, " 错误信息:", data.data);
}
})
.catch(error => {
console.error(error);
});
"""