# zxing-js-library
**Repository Path**: lanten/zxing-js-library
## Basic Information
- **Project Name**: zxing-js-library
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-03-28
- **Last Updated**: 2020-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[][1]
# ZXing
### Runs on your favorite ECMAScript ecosystem
> If it doesn't, we gonna make it.
## What is ZXing?
> [ZXing][1] ("zebra crossing") is an open-source, multi-format 1D/2D barcode image processing library implemented in Java, with ports to other languages.
## Supported Formats
> See [Projects](https://github.com/zxing-js/library/projects) and [Milestones](https://github.com/zxing-js/library/milestones) for what is currently done and what's planned next. 👀
| 1D product | 1D industrial | 2D |
| ---------- | ------------------- | -------------- |
| ~~UPC-A~~ | Code 39 | QR Code |
| ~~UPC-E~~ | ~~Code 93~~ | Data Matrix |
| EAN-8 | Code 128 | ~~Aztec~~ \* |
| EAN-13 | ~~Codabar~~ | ~~PDF 417~~ \* |
| | ITF | ~~MaxiCode~~ |
| | RSS-14 |
| | ~~RSS-Expanded~~ \* |
**\*** In progress, may have open PR.
## Status
[](https://travis-ci.org/zxing-js/library)

[](https://greenkeeper.io/)
[][0]
[][0]
[](https://github.com/zxing-js/library/graphs/contributors)
[](https://github.com/zxing-js/library/compare/master...develop)
[](https://www.codacy.com/app/zxing/library?utm_source=github.com&utm_medium=referral&utm_content=zxing-js/library&utm_campaign=Badge_Grade)
[](https://codeclimate.com/github/zxing-js/library/maintainability)
[](https://codeclimate.com/github/zxing-js/library/test_coverage)
[](https://bettercodehub.com/)
## Demo
See [Live Preview](https://zxing-js.github.io/library/) in browser.
**Note:** All the examples are using ES6, be sure is supported in your browser or modify as needed, Chrome recommended.
## Installation
`npm i @zxing/library --save`
or
`yarn add @zxing/library`
## Usage
### Use on browser with ES6 modules:
```html
```
#### Or asynchronously:
```html
```
### Use on browser with AMD:
```html
```
### Use on browser with UMD:
```html
```
### Use outside the browser with CommonJS:
```javascript
const { MultiFormatReader, BarcodeFormat } = require('@zxing/library/esm5'); // use this path since v0.5.1
const hints = new Map();
const formats = [BarcodeFormat.QR_CODE, BarcodeFormat.DATA_MATRIX/*, ...*/];
hints.set(DecodeHintType.POSSIBLE_FORMATS, formats);
const reader = new MultiFormatReader();
reader.setHints(hints);
const luminanceSource = new RGBLuminanceSource(imgWidth, imgHeight, imgByteArray);
const binaryBitmap = new BinaryBitmap(new HybridBinarizer(luminanceSource));
reader.decode(binaryBitmap);
```
## Browser Support
The browser layer is using the [MediaDevices](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices) web API which is not supported by older browsers.
_You can use external polyfills like [WebRTC adapter](https://github.com/webrtc/adapter) to increase browser compatibility._
Also, note that the library is using the [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) (`Int32Array`, `Uint8ClampedArray`, etc.) which are not available in older browsers (e.g. Android 4 default browser).
_You can use [core-js](https://github.com/zloirock/core-js) to add support to these browsers._
### Scanning from Video Camera
To display the input from the video camera you will need to add a video element in the HTML page:
```html
```
To start decoding, first obtain a list of video input devices with:
```javascript
const codeReader = new ZXing.BrowserQRCodeReader();
codeReader
.listVideoInputDevices()
.then(videoInputDevices => {
videoInputDevices.forEach(device =>
console.log(`${device.label}, ${device.deviceId}`)
);
})
.catch(err => console.error(err));
```
If there is just one input device you can use the first `deviceId` and the video element id (in the example below is also 'video') to decode:
```javascript
const firstDeviceId = videoInputDevices[0].deviceId;
codeReader
.decodeOnceFromVideoDevice(firstDeviceId, 'video')
.then(result => console.log(result.text))
.catch(err => console.error(err));
```
If there are more input devices then you will need to chose one for `codeReader.decodeOnceFromVideoDevice` device id parameter.
You can also provide `undefined` for the device id parameter in which case the library will automatically choose the camera, preferring the main (environment facing) camera if more are available:
```javascript
codeReader
.decodeOnceFromVideoDevice(undefined, 'video')
.then(result => console.log(result.text))
.catch(err => console.error(err));
```
### Scanning from Video File
Similar as above you can use a video element in the HTML page:
```html
```
And to decode the video from an url:
```javascript
const codeReader = new ZXing.BrowserQRCodeReader();
const videoSrc = 'your url to a video';
codeReader
.decodeFromVideo('video', videoSrc)
.then(result => console.log(result.text))
.catch(err => console.error(err));
```
You can also decode the video url without showing it in the page, in this case no `video` element is needed in HTML.
```javascript
codeReader
.decodeFromVideoUrl(videoUrl)
.then(result => console.log(result.text))
.catch(err => console.error(err));
// or alternatively
codeReader
.decodeFromVideo(null, videoUrl)
.then(result => console.log(result.text))
.catch(err => console.error(err));
```
### Scanning from Image
Similar as above you can use a img element in the HTML page (with src attribute set):
```html
```
And to decode the image:
```javascript
const codeReader = new ZXing.BrowserQRCodeReader();
const img = document.getElementById('img');
codeReader
.decodeFromImage(img)
.then(result => console.log(result.text))
.catch(err => console.error(err));
```
You can also decode the image url without showing it in the page, in this case no `img` element is needed in HTML:
```javascript
const imgSrc = 'url to image';
codeReader
.decodeFromImage(undefined, imgSrc)
.then(result => console.log(result.text))
.catch(err => console.error(err));
```
Or decode the image url directly from an url, with an `img` element in page (notice no `src` attribute is set for `img` element):
```html
```
```javascript
const imgSrc = 'url to image';
const imgDomId = 'img-to-decode';
codeReader
.decodeFromImage(imgDomId, imgSrc)
.then(result => console.log(result.text))
.catch(err => console.error(err));
```
## Barcode generation
To generate a QR Code SVG image include 'zxing.qrcodewriter.min.js' from `build/vanillajs`. You will need to include an element where the SVG element will be appended:
```html