Add barcode-detector-api-polyfill dependency and update environment variable declarations in SvelteKit project
This commit is contained in:
+87
@@ -0,0 +1,87 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.BarcodeDetector = void 0;
|
||||
const browser_1 = require("@zxing/browser");
|
||||
const library_1 = require("@zxing/library");
|
||||
const constants_1 = require("./constants");
|
||||
class BarcodeDetector {
|
||||
constructor(options) {
|
||||
const hints = new Map([
|
||||
[library_1.DecodeHintType.TRY_HARDER, true],
|
||||
[
|
||||
library_1.DecodeHintType.POSSIBLE_FORMATS,
|
||||
options
|
||||
? options.formats.map((f) => constants_1.nativeToZxingFormat[f])
|
||||
: Object.values(constants_1.nativeToZxingFormat),
|
||||
],
|
||||
]);
|
||||
this.reader = new browser_1.BrowserMultiFormatReader(hints);
|
||||
}
|
||||
static getSupportedFormats() {
|
||||
return Promise.resolve(Object.values(constants_1.zxingToNativeFormat));
|
||||
}
|
||||
async detect(imageSource) {
|
||||
try {
|
||||
let result;
|
||||
if (imageSource instanceof HTMLVideoElement || imageSource instanceof HTMLImageElement) {
|
||||
result = await this.reader.scanOneResult(imageSource, false);
|
||||
}
|
||||
else if (imageSource instanceof HTMLCanvasElement) {
|
||||
result = this.reader.decodeFromCanvas(imageSource);
|
||||
}
|
||||
else if (imageSource instanceof Blob) {
|
||||
const image = await this.blobToImage(imageSource);
|
||||
result = await this.reader.scanOneResult(image, false);
|
||||
}
|
||||
else if (imageSource instanceof ImageBitmap
|
||||
|| imageSource instanceof ImageData
|
||||
|| imageSource instanceof VideoFrame) {
|
||||
result = this.reader.decodeFromCanvas(this.imageDataSourceToCanvas(imageSource));
|
||||
}
|
||||
else {
|
||||
throw new TypeError('Image source is not supported');
|
||||
}
|
||||
return [{
|
||||
rawValue: result.getText(),
|
||||
format: constants_1.zxingToNativeFormat[result.getBarcodeFormat()],
|
||||
boundingBox: new DOMRectReadOnly(), // TODO: think of a way to map this in a meaningful way
|
||||
cornerPoints: result.getResultPoints().map((p) => ({ x: p.getX(), y: p.getY() })),
|
||||
}];
|
||||
}
|
||||
catch (err) {
|
||||
if (err && !(err instanceof library_1.NotFoundException)) {
|
||||
throw err;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
}
|
||||
async blobToImage(blob) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const imageObjUrl = URL.createObjectURL(blob);
|
||||
const image = new Image();
|
||||
image.onload = () => {
|
||||
URL.revokeObjectURL(imageObjUrl);
|
||||
resolve(image);
|
||||
};
|
||||
image.onerror = () => reject();
|
||||
image.src = imageObjUrl;
|
||||
});
|
||||
}
|
||||
imageDataSourceToCanvas(source) {
|
||||
const canvas = document.createElement('canvas');
|
||||
const ctx = canvas.getContext('2d');
|
||||
const width = source instanceof VideoFrame ? source.displayWidth : source.width;
|
||||
const height = source instanceof VideoFrame ? source.displayHeight : source.height;
|
||||
if (ctx) {
|
||||
if (source instanceof ImageData) {
|
||||
ctx.putImageData(source, width, height);
|
||||
}
|
||||
else {
|
||||
ctx.drawImage(source, width, height);
|
||||
}
|
||||
}
|
||||
return canvas;
|
||||
}
|
||||
}
|
||||
exports.BarcodeDetector = BarcodeDetector;
|
||||
//# sourceMappingURL=BarcodeDetector.js.map
|
||||
Reference in New Issue
Block a user