
Product
Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
@undecaf/barcode-detector-polyfill
Advanced tools
A WebAssembly polyfill for the Barcode Detection API
This package polyfills the Barcode Detection API for browsers, using a WebAssembly build of the ZBar Bar Code Reader that is written in C/C++. It offers the following features:
codabar
, code_39
, code_93
, code_128
, databar
, databar_exp
, ean_2
, ean_5
,
ean_8
, ean_13
, ean_13+2
, ean_13+5
, isbn_10
, isbn_13
, isbn_13+2
, isbn_13+5
, itf
,
qr_code
, sq_code
, upc_a
, upc_e
aztec
, data_matrix
, pdf417
<img>
, <canvas>
and live <video>
elements, image and video Blob
s and File
s and moreAn online example is available on GitHub (source code with build scripts for Rollup and esbuild) and on CodePen.
BarcodeDetector
Install:
$ npm install @undecaf/barcode-detector-polyfill
or
$ yarn add @undecaf/barcode-detector-polyfill
Make the polyfill available if necessary:
import { BarcodeDetectorPolyfill } from '@undecaf/barcode-detector-polyfill'
try {
window['BarcodeDetector'].getSupportedFormats()
} catch {
window['BarcodeDetector'] = BarcodeDetectorPolyfill
}
⁝
Detailed examples are available here (source code) and here (source code).
<script type="module">
Import the BarcodeDetectorPolyfill
API:
<script type="module">
import { BarcodeDetectorPolyfill } from "https://cdn.jsdelivr.net/npm/@undecaf/barcode-detector-polyfill@0.9.23/dist/main.js";
try {
window['BarcodeDetector'].getSupportedFormats()
} catch {
window['BarcodeDetector'] = BarcodeDetectorPolyfill
}
⁝
</script>
A detailed example is available here (source code).
<script>
Expose the BarcodeDetectorPolyfill
API in variable barcodeDetectorPolyfill
:
<script src="https://cdn.jsdelivr.net/npm/@undecaf/zbar-wasm@0.9.15/dist/index.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@undecaf/barcode-detector-polyfill@0.9.23/dist/index.js"></script>
<script>
try {
window['BarcodeDetector'].getSupportedFormats()
} catch {
window['BarcodeDetector'] = barcodeDetectorPolyfill.BarcodeDetectorPolyfill
}
⁝
</script>
A detailed example is available here (source code).
BarcodeDetector
/BarcodeDetectorPolyfill
const formats = await BarcodeDetector.getSupportedFormats()
BarcodeDetector
instanceconst detector = new BarcodeDetector({ formats: ['code_39', 'code_128', 'ean_13'] })
If formats
is omitted then all supported formats will be detected.
Where applicable (e.g. format 'qr_code'
), text is assumed to be UTF-8 encoded. As an extension to the
BarcodeDetector
API, a different encoding can be set for the BarcodeDetectorPolyfill
:
const detector = new BarcodeDetectorPolyfill({
formats: ['qr_code'],
zbar: {
encoding: 'iso-8859-15'
}
})
encoding
may be any of the Encoding API encodings.
const barcodes = await detector.detect(source)
source
must be an object of which an ImageBitmap
can be obtained, or else a
TypeError
will be thrown:
<img>
element (HTMLImageElement
),
must be completely loaded, or else a DOMException
will be thrown as InvalidStateError
<image>
element (SVGImageElement
)<canvas>
element (HTMLCanvasElement
)CanvasRenderingContext2D
OffscreenCanvas
①OffscreenCanvasRenderingContext2D
①<video>
element (HTMLVideoElement
) from which a single frame will be taken. The video
must be playing, or else a DOMException
will be thrown
as InvalidStateError
VideoFrame
①ImageBitmap
①ImageData
instance ①Blob
or a
File
with a content type
of image/*
①① Also available in Web Workers
In addition, any object with a zero width
or height
property will be tolerated.
The detector processes the source
in natural size, making detection results independent of the size rendered
by the browser.
Detected barcodes are stored as an array of objects in barcodes
since source
may contain multiple barcodes.
Each object has the following properties
(see here for details):
format
: the detected barcode format (one of the formats specified as constructor options)rawValue
: the decoded barcode, always a string
decoded from raw data as specifiedboundingBox
: the DOMRectReadOnly
enclosing the
barcode in the source
cornerPoints
: an arry of four {x, y}
pairs in clockwise order, representing four corner points of the detected barcode.
BarcodeDetectorPolyfill
returns the boundingBox
corner points.Additional properties provided only by BarcodeDetectorPolyfill
:
orientation
: 0
→ image is upright, 1
→ rotated 90° clockwise, 2
→ upside down,
3
→ rotated 90° counterclockwise, -1
→ unknownquality
: a positive integer indicating the barcode quality as seen by the detector,
specific to each format
If an error occurs during barcode detection then the detect()
method returns a rejected
Promise
containing the error.
Peculiarities owed to the underlying ZBar Bar Code Reader:
ISBN-10
will be scanned as ISBN-13
or EAN-13
if these are among the accepted formats
EAN-13+*
will be scanned as ISBN-13+*
if any ISBN-*
is among the accepted formats
Type definitions for BarcodeDetectorPolyfill
, for constructor and method parameter types and for result types
are provided in @undecaf/barcode-detector-polyfill/dist/main.d.ts
.
@undecaf/zbar-wasm
This package
is under the MIT license although it depends on @undecaf/zbar-wasm
which is under LGPL.
Nevertheless, @undecaf/zbar-wasm
may be bundled in your project as this does not violate the LGPL requirements.
Module @undecaf/zbar-wasm
, however, expects the WASM file zbar.wasm
to be located at the same path as itself;
details can be found in the documentation of @undecaf/zbar-wasm
.
Therefore, bundlers must be configured accordingly. Configuration examples for Rollup and esbuild
can be found in directory example-bundled
.
They were used to bundle the JavaScript code for this online example
in docs/example-bundled
.
@undecaf/zbar-wasm
at runtimeIn order to comply with the LGPL,
@undecaf/zbar-wasm
must not be bundled but may only be loaded as a library at runtime.@undecaf/zbar-wasm
can also be loaded at runtime, by default from https://cdn.jsdelivr.net
. It can also be fetched from
a different endpoint if desired.
Bundlers must be configured so that they treat @undecaf/zbar-wasm
as an external dependency instead of trying to resolve it.
Configuration examples for Rollup and esbuild
can be found in directory example-loaded
.
They were used to bundle the JavaScript code for this online example
in docs/example-loaded
.
They also illustrate how to load @undecaf/zbar-wasm
from a non-default endpoint.
barcode-detector-zbar
that has an extensive list of useful linksI, the author of this document, have compiled it to the best of my knowledge, but it still expresses my personal opinion. Therefore, in addition to what the licenses mentioned below state, I hereby decline any liability for any false, inaccurate, inappropriate or incomplete information that may be presented here.
Software: MIT
Documentation: CC-BY-SA 4.0
FAQs
A WebAssembly polyfill for the Barcode Detection API
The npm package @undecaf/barcode-detector-polyfill receives a total of 1,627 weekly downloads. As such, @undecaf/barcode-detector-polyfill popularity was classified as popular.
We found that @undecaf/barcode-detector-polyfill demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.