2017-11-20 00:26:45 +01:00
2018-01-21 20:36:42 -06:00
2017-12-05 20:51:44 -06:00

QR Scanner

Javascript QR Code Scanner based on Lazar Lazslo's javascript port of Google's ZXing library.

In this library, several improvements have been applied over the original port:

  • Lightweight: ~33.7 kB (~12 kB gzipped) minified with Google's closure compiler.
  • Improved binarizer which makes it more tolerant to shades and reflections on the screen.
  • Can be configured for better performance on colored QR codes.
  • Runs in a WebWorker which keeps the main / UI thread responsive.
  • Works on higher resolution pictures by default.

The library supports scanning a continuous video stream from a web cam as well as scanning of single images.

Demo

See https://nimiq.github.io/qr-scanner/demo/

Usage

Web Cam Scanning

1. Import the library:

<script src="qr-scanner.min.js"></script>

2. Create HTML

Create a <video> element where the web cam video stream should get rendered:

<video></video>

3. Create a QrScanner Instance

const qrScanner = new QrScanner(videoElem, result => console.log('decoded qr code:', result));

As an optional third parameter a specific resolution that should be worked on can be specified. The default is 400.

Note: to read from a Web Cam stream, your page must be served via HTTPS.

Single Image Scanning

1. Import the library:

<script src="qr-scanner.min.js"></script>

2. Scan your image

QrScanner.scanImage(image)
    .then(result => console.log(result))
    .catch(error => console.log(error || 'No QR code found.'));

Supported image sources are: HTMLImageElement, SVGImageElement, HTMLVideoElement, HTMLCanvasElement, ImageBitmap, OffscreenCanvas, File / Blob

Color Inverted Mode

The scanner by default scans for dark QR codes on a bright background. You can change this behavior to scan for bright QR codes on dark background or for both at the same time:

qrScanner.setInversionMode(inversionMode);

Where inversionMode can be original, invert or both. The default for web cam scanning is original and for single image scanning both.

Color Correction

Change the weights for red, green and blue in the grayscale computation to improve contrast for QR codes of a specific color:

qrScanner.setGrayscaleWeights(red, green, blue);

Where red, green and blue must sum up to 256.

Build the project

The project is prebuild in qr-scanner.min.js in combination with qr-scanner-worker.min.js. Building yourself is only necessary if you want to change the code in the /src folder. NodeJs and Java are required for building.

Install required build packages:

npm install

Building:

npm run build

Debug Mode

To enable debug mode:

qrScanner._qrWorker.postMessage({
    type: 'setDebug',
    data: true
});

To handle the debug image:

qrScanner._qrWorker.addEventListener('message', event => {
  if (event.data.type === 'debugImage') {
      canvasContext.putImageData(event.data.data, 0, 0);
  }
});
S
Description
Lightweight Javascript QR Code Scanner
Readme MIT
3 MiB
Languages
TypeScript 93.5%
JavaScript 6.5%