A Vue.js set of components to scan barcodes and QR codes.
Installations
npm install @teckel/vue-barcode-reader
Developer Guide
Typescript
No
Module System
CommonJS
Node Version
20.5.0
NPM Version
9.8.0
Score
56.1
Supply Chain
90.7
Quality
77.6
Maintenance
100
Vulnerability
98.9
License
Releases
Contributors
Unable to fetch Contributors
Languages
Vue (98.52%)
JavaScript (1.48%)
Developer
teckel12
Download Statistics
Total Downloads
8,857
Last Day
84
Last Week
308
Last Month
1,363
Last Year
6,775
GitHub Statistics
21 Stars
74 Commits
6 Forks
2 Watching
1 Branches
1 Contributors
Bundle Size
1.29 kB
Minified
548.00 B
Minified + Gzipped
Package Meta Information
Latest Version
1.1.8
Package Id
@teckel/vue-barcode-reader@1.1.8
Unpacked Size
20.93 kB
Size
6.42 kB
File Count
5
NPM Version
9.8.0
Node Version
20.5.0
Publised On
25 Nov 2024
Total Downloads
Cumulative downloads
Total Downloads
8,857
Last day
68%
84
Compared to previous day
Last week
-19.6%
308
Compared to previous week
Last month
39.4%
1,363
Compared to previous month
Last year
225.4%
6,775
Compared to previous year
Daily Downloads
Weekly Downloads
Monthly Downloads
Yearly Downloads
Dependencies
1
Vue 3 Barcode and QR Code Camera Scanner and Image Reader
A Vue.js set of components to scan barcodes and QR codes (or upload images).
Enhancements
The following bug fixes, features & improvements over the abandoned package by olefirenko
- Uses latest version of the ZXing library which greatly increases scanning speed and compatibility.
- On startup, searches all available rear-facing cameras to find the most ideal camera for barcode scanning, preferably one with torch (flash) and autofocus. Also saves this ideal camera to local storage for faster startup on repeat scans.
- Adds option to activate the torch (camera flash), which can yield higher barcode scanning speed and accuracy (Android only).
- Adds option to cycle through the available cameras (if more than one camera is available).
- Adds option to set orientation to landscape mode, this can also increase the scanning speed and accuracy as there's more horizontal pixels in the landscape orientation.
- Adds option to control the camera zoom (if camera device reports the user is allowed to set the zoom).
- Adds option to switch between autofocus and manual focus mode (defaults to autofocus mode if available).
- Adds option to set the focus distance (if in manual focus mode and camera device supports the feature).
- Adds option to only select from rear-facing cameras (you probably only want rear-facing cameras when scanning barcodes).
- Adds option to control the time between decode scans (defaults to 500ms).
Benefits
- Scans multiple 1D barcode formats and 2D QR Codes.
- Uses ZXing ("zebra crossing"), an open-source, multi-format 1D/2D barcode image processing library implemented in Java, with ports to other languages.
Demo
Installation
The easiest way to use Vue Barcode Reader is to install it with npm or yarn.
1npm install @teckel/vue-barcode-reader --save
Or
1yarn add @teckel/vue-barcode-reader
Usage
The Vue Barcode Reader works out of the box by just including it.
Scanning from Video Camera
Once a stream from the users camera is loaded, it's displayed and continuously scanned for barcodes. Results are indicated by the decode event.
Composition API example:
1<script setup> 2import { ref } from 'vue' 3import { StreamBarcodeReader } from '@teckel/vue-barcode-reader' 4 5const decodedText = ref('') 6 7const onDecode = (result) => { 8 decodedText = result 9} 10 11const onLoaded = () => { 12 console.log('loaded') 13} 14</script> 15 16<template> 17 <StreamBarcodeReader 18 torch 19 no-front-cameras 20 @decode="onDecode" 21 @loaded="onLoaded" 22 /> 23 <h2>Decoded value: {{ decodedText }}</h2> 24</template>
Options API example:
1<template> 2 <StreamBarcodeReader 3 torch 4 no-front-cameras 5 @decode="onDecode" 6 @loaded="onLoaded" 7 /> 8 <h2>Decoded value: {{ decodedText }}</h2> 9</template> 10 11<script> 12import { StreamBarcodeReader } from '@teckel/vue-barcode-reader' 13 14export default { 15 components: { StreamBarcodeReader }, 16 data() { 17 return { 18 decodedText: '', 19 } 20 }, 21 methods: { 22 onDecode(result) { 23 this.decodedText = result 24 }, 25 onLoaded() { 26 console.log('loaded') 27 }, 28 } 29} 30</script>
Scanning from Image
The component renders to a simple file picker input element. Clicking opens a file dialog. On supporting mobile devices the camera is started to take a picture. The selected images are directly scanned and positive results are indicated by the decode
event.
1import { ImageBarcodeReader } from '@teckel/vue-barcode-reader'
In your template you can use this syntax:
1<ImageBarcodeReader 2 @decode="onDecode" 3 @error="onError" 4/>
Props
Props will only work if the camera reports that the feature is supported. Some camera devices and some platforms either don't allow setting constraints or don't report the feature exists. Chrome on Android work quite well, while (as expected) iOS and Safari don't support most/all features.
torch
Activate the torch (flash). Can be set with simply torch
or controlled via :torch="torch"
.
zoom
Set the zoom value (min/max/step available in hasZoom
emitted value).
landscape
Set the browser to landscape orientation. In order to set landscape mode, the browser will first switch to fullscreen mode (this is required to force landscape mode).
autofocus
Defaults to true
, but setting :autofocus="false"
turns off autofocus (manual focus).
focus-distance
Must have
:autofocus="false"
(turning off autofocus and turning on manual focus) for focus-distance to work.
Set the focus distance (min/max/step available in hasFocusDistance
emitted value).
no-front-cameras
Only selects from rear-facing cameras. This only works if the device reports the camera's orientation.
device-index
Select the index of the camera device to use (get the camera device array from the videoDevices
emitted value).
msBetweenDecoding
Set the time between decode scans (defaults to 500ms). This is useful if you want to limit the number of scans per second (for example, if you're scanning a barcode on a moving object, you may want to limit the number of scans per second).
Emitted values
hasTorch
Returns true
or false
if camera device reports it's capable of activating the torch (flash).
hasAutofocus
Returns true
or false
if camera device reports it's capable of autofocus mode.
hasZoom
Returns false
or object containing min
, max
, step
set from the supported camera device.
hasFocusDistance
Returns false
or object containing min
, max
, step
set from the supported camera device.
videoDevices
Returns an array of camera devices available to the browser (can be used to select the desired camera device via device-index
prop).
cameraDetails
Object dump of the library processing to select the ideal camera, switch cameras, and apply constraints (useful for debugging or could be used for enhanced features).
Events
loaded
When the library is loaded and the camera is ready to scan
decode
When a barcode or QR code is scanned. The result is passed as a parameter to the event handler. The result is the text encoded in the barcode or QR code.
result
When a barcode or QR code is scanned. The result is passed as a parameter to the event handler. Below is an example result object from the UPC code of a box of Kellogg's Frosted Mini-Wheats:
1{ 2 "text": "038000199349", 3 "rawBytes": null, 4 "numBits": 0, 5 "resultPoints": [ 6 { 7 "x": 189, 8 "y": 240 9 }, 10 { 11 "x": 445.5, 12 "y": 240 13 } 14 ], 15 "format": 14, 16 "timestamp": 1690401753332, 17 "resultMetadata": null 18}
Barcode formats (from above JSON object format
):
- 0 Aztec
- 1 Codabar
- 2 Code 39
- 3 Code 93
- 4 Code 128
- 5 Data Matrix
- 6 EAN-8
- 7 EAN-13
- 8 ITF
9 MaxiCode(not supported)- 10 PDF 417
- 11 QR Code
- 12 RSS-14
13 RSS-Expanded(not supported)- 14 UPC-A
- 15 UPC-E
- 16 UPC-EAN Extension
![Empty State](/_next/static/media/empty.e5fae2e5.png)
No vulnerabilities found.
![Empty State](/_next/static/media/empty.e5fae2e5.png)
No security vulnerabilities found.