docs/http/api_qrcode.md
<a id="/api/qrcode"></a>
URL:/api/qrcode
例:http://127.0.0.1:1224/api/qrcode
方法:POST
参数:json 字典,值为:
data:image/png;base64, 等前缀。"preprocessing.grayscale"=true 时,此参数才生效。默认为false。参数示例:
{
"base64": "iVBORw0KGgoAAAAN……",
"options": {
"preprocessing.sharpness_factor": 1.0,
"preprocessing.contrast_factor": 1.0,
"preprocessing.grayscale": false,
"preprocessing.threshold": false,
}
}
返回 json ,与 OCR 结果的格式非常相似。
| 字段 | 类型 | 描述 |
|---|---|---|
| code | int | 任务状态码。100为成功,101为无文本,其余为失败 |
| data | list | 识别结果,格式见下 |
| time | double | 识别耗时(秒) |
| timestamp | double | 任务开始时间戳(秒) |
data 格式图片中无文本(code==101),或识别失败(code!=100 and code!=101)时:
["data"] 为string,内容为错误原因。例: {"code": 204, "data": "【Error】zxingcpp 二维码解析失败。\n[Error] zxingcpp read_bar……"}识别成功(code==100)时:
["data"] 为list,记录图片中每个二维码的结果(一张图片可能含多个码)。每项结果的子元素为:| 参数名 | 类型 | 描述 |
|---|---|---|
| text | string | 二维码文本。 |
| format | string | 二维码格式,如 "QRCode" 等,具体见下。 |
| box | list | 文本框顺时针四个角的xy坐标:[左上,右上,右下,左下] |
| orientation | int | 二维码方向。0为正上。 |
| score | int | 为了与OCR格式兼容而设,永远为1,无意义。 |
<a id="qrcode_format"></a>
"Aztec","Codabar","Code128","Code39","Code93","DataBar","DataBarExpanded","DataMatrix","EAN13","EAN8","ITF","LinearCodes","MatrixCodes","MaxiCode","MicroQRCode","PDF417","QRCode","UPCA","UPCE"
结果示例:
{
"code": 100,
"data": [ {
"orientation": 0,
"box": [[4,4],[25,4],[25,25],[4,25]],
"score": 1,
"format": "QRCode",
"text": "abc"
} ],
"time": 0,
"timestamp": 1711521012.625574
}
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("QRCode count:", data.data.length);
for (let d of data.data) {
console.log(" text: ", d.text);
console.log(" format: ", d.format);
console.log(" orientation: ", d.orientation);
console.log(" ====");
}
}
else {
console.log("Error! Code", data.code, " Msg: ", data.data);
}
})
.catch(error => { console.error(error); });
<a id="/api/qrcode/text"></a>
传入文本,根据文本生成二维码图片,返回图片base64。
URL:/api/qrcode (与二维码识别接口一致,只是参数不同)
例:http://127.0.0.1:1224/api/qrcode
方法:POST
参数:json 字典,值为:
"QRCode" 。0 为自动设为最小宽度。0 为自动设为最小高度。-1 为自动调节。-1 。可选值: -1:自动, 1:7%,0:15%,3:25%, 2:30%。仅在这些格式下生效:Aztec、PDF417、QRCode 。参数示例:
{
"text": "要写入二维码的文本",
"options": {
"format": "QRCode",
"w": 0,
"h": 0,
"quiet_zone": -1,
"ec_level": -1,
}
}
json
| 字段名 | 类型 | 描述 |
|---|---|---|
| code | int | 任务状态。100成功,其余为失败 |
| data | string | 生成结果,格式见下 |
code==100)时:"data" 为图片的base64字符串,图片编码为jpeg。code!=100)时:"data" 为错误信息字符串。const url = "http://127.0.0.1:1224/api/qrcode";
const data = {
"text": "test abc 123 !!!",
// "options": {
// "format": "QRCode",
// "w": 0,
// "h": 0,
// "quiet_zone": -1,
// "ec_level": -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("Image base64: \n", data.data);
}
else {
console.log("Error! Code", data.code, " Msg: ", data.data);
}
})
.catch(error => { console.error(error); });