4NK_node/ihm_client/node_modules/html5-qrcode/es2015/zxing-html5-qrcode-decoder.js

102 lines
4.1 KiB
JavaScript

import * as ZXing from "../third_party/zxing-js.umd";
import { QrcodeResultFormat, Html5QrcodeSupportedFormats } from "./core";
export class ZXingHtml5QrcodeDecoder {
constructor(requestedFormats, verbose, logger) {
this.formatMap = new Map([
[Html5QrcodeSupportedFormats.QR_CODE, ZXing.BarcodeFormat.QR_CODE],
[Html5QrcodeSupportedFormats.AZTEC, ZXing.BarcodeFormat.AZTEC],
[Html5QrcodeSupportedFormats.CODABAR, ZXing.BarcodeFormat.CODABAR],
[Html5QrcodeSupportedFormats.CODE_39, ZXing.BarcodeFormat.CODE_39],
[Html5QrcodeSupportedFormats.CODE_93, ZXing.BarcodeFormat.CODE_93],
[
Html5QrcodeSupportedFormats.CODE_128,
ZXing.BarcodeFormat.CODE_128
],
[
Html5QrcodeSupportedFormats.DATA_MATRIX,
ZXing.BarcodeFormat.DATA_MATRIX
],
[
Html5QrcodeSupportedFormats.MAXICODE,
ZXing.BarcodeFormat.MAXICODE
],
[Html5QrcodeSupportedFormats.ITF, ZXing.BarcodeFormat.ITF],
[Html5QrcodeSupportedFormats.EAN_13, ZXing.BarcodeFormat.EAN_13],
[Html5QrcodeSupportedFormats.EAN_8, ZXing.BarcodeFormat.EAN_8],
[Html5QrcodeSupportedFormats.PDF_417, ZXing.BarcodeFormat.PDF_417],
[Html5QrcodeSupportedFormats.RSS_14, ZXing.BarcodeFormat.RSS_14],
[
Html5QrcodeSupportedFormats.RSS_EXPANDED,
ZXing.BarcodeFormat.RSS_EXPANDED
],
[Html5QrcodeSupportedFormats.UPC_A, ZXing.BarcodeFormat.UPC_A],
[Html5QrcodeSupportedFormats.UPC_E, ZXing.BarcodeFormat.UPC_E],
[
Html5QrcodeSupportedFormats.UPC_EAN_EXTENSION,
ZXing.BarcodeFormat.UPC_EAN_EXTENSION
]
]);
this.reverseFormatMap = this.createReverseFormatMap();
if (!ZXing) {
throw "Use html5qrcode.min.js without edit, ZXing not found.";
}
this.verbose = verbose;
this.logger = logger;
const formats = this.createZXingFormats(requestedFormats);
const hints = new Map();
hints.set(ZXing.DecodeHintType.POSSIBLE_FORMATS, formats);
hints.set(ZXing.DecodeHintType.TRY_HARDER, false);
this.hints = hints;
}
decodeAsync(canvas) {
return new Promise((resolve, reject) => {
try {
resolve(this.decode(canvas));
}
catch (error) {
reject(error);
}
});
}
decode(canvas) {
const zxingDecoder = new ZXing.MultiFormatReader(this.verbose, this.hints);
const luminanceSource = new ZXing.HTMLCanvasElementLuminanceSource(canvas);
const binaryBitmap = new ZXing.BinaryBitmap(new ZXing.HybridBinarizer(luminanceSource));
let result = zxingDecoder.decode(binaryBitmap);
return {
text: result.text,
format: QrcodeResultFormat.create(this.toHtml5QrcodeSupportedFormats(result.format)),
debugData: this.createDebugData()
};
}
createReverseFormatMap() {
let result = new Map();
this.formatMap.forEach((value, key, _) => {
result.set(value, key);
});
return result;
}
toHtml5QrcodeSupportedFormats(zxingFormat) {
if (!this.reverseFormatMap.has(zxingFormat)) {
throw `reverseFormatMap doesn't have ${zxingFormat}`;
}
return this.reverseFormatMap.get(zxingFormat);
}
createZXingFormats(requestedFormats) {
let zxingFormats = [];
for (const requestedFormat of requestedFormats) {
if (this.formatMap.has(requestedFormat)) {
zxingFormats.push(this.formatMap.get(requestedFormat));
}
else {
this.logger.logError(`${requestedFormat} is not supported by`
+ "ZXingHtml5QrcodeShim");
}
}
return zxingFormats;
}
createDebugData() {
return { decoderName: "zxing-js" };
}
}
//# sourceMappingURL=zxing-html5-qrcode-decoder.js.map