qrcodedetector.js
2.6 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import ARCS from '../engine/arcs.js';
let QRCodeDetector;
QRCodeDetector = ARCS.Component.create(
function() {
let self = this;
let makeFromJSQR = function(code) {
return {
id: code.data,
corners: [
code.location.topLeftCorner,
code.location.topRightCorner,
code.location.bottomRightCorner,
code.location.bottomLeftCorner
]
};
};
let makeFromBarcodeReader = function(code) {
return {
id: code.rawValue,
corners: [
code.cornerPoints[3],
code.cornerPoints[2],
code.cornerPoints[1],
code.cornerPoints[0]
]
};
};
if (window.BarcodeDetector) {
let detector = new BarcodeDetector();
this.detect= async function(imageData) {
let codes = await detector.detect(imageData);
for(const code of codes) {
if (code.format === 'qr_code') {
this.emit('onQRCode', [ makeFromBarcodeReader(code)]);
}
}
};
} else {
let busy = false;
let dataCache = null;
const worker = new Worker('../../deps/jsqr/worker.js');
worker.addEventListener("message", ((data) => {
busy = false;
dataCache = data.data;
}));
this.detect= function(imageData) {
if (!busy) {
busy = true;
worker.postMessage(imageData);
}
if (dataCache !== null) {
console.log("qrdata", makeFromJSQR(dataCache));
this.emit('onQRCode', [makeFromJSQR(dataCache)]);
}
};
}
},
['detect'],
['onQRCode']
);
export default {QRCodeDetector: QRCodeDetector};
/*
ARCS.__lib__`
{
"components": {
"QRCodeDetector": {
"description": "Detect QR codes in an image",
"keywords": [
"qr",
"code",
"detector"
]
}
},
"dependencies": [ "jsqr"],
"recipes": [
{ "from": "node_modules/jsqr/dist/jsQR.js", "to": "deps/jsqr/jsQR.js"}
]
}`;
*/