npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

zxing-qr-reader

v2.1.0

Published

QR code reader based on ZXing C++ port by @nu-book compiled to wasm for use in the web.

Downloads

11

Readme

ZXing QR Reader

A QR code reader based on a wasm port of Zebra Crossing library by @nu-book.

Installation

npm install zxing-qr-reader

Demo

You can find the demo here

Usage

Instantiate the QrReader class by passing a canvas context to the constructor.
The way this was designed means you shouldn't need a react to use it :D.
NOTE: The resolution of the camera feed is the same as the size of the canvas.

import React from 'react';
import { QrReader } from 'zxing-qr-reader';

class App extends React.Component {
	componentDidMount() {
		const canvas = document.getElementById('canvas');//get canvas
		const context = canvas.getContext('2d');//get canvas context

		this.qr_reader = new QrReader(context);//instantiate qr reader

		this.qr_reader.scan();//start scan

		this.qr_reader.on('found', (result) => {
			console.log(result.text); //called when qr code was found
		});
    	}
    
	componentWillUnmount() {
		this.qr_reader.stop();
	}
	render() {
		return (
			<div>
				<canvas id="canvas" width={480} height={852}></canvas> //480p resolution in portrait on mobile
			</div>
		);
	}
}

A cover calculation is done when the image is drawn to the canvas meaning supplying one resolution for mobile devices and one other for desktop devices should suffice.
Typically a 600x600 resolution for desktop and 480x852 resolution for mobile does the trick. This gives fullscreen image on mobile and a large enough image on most desktop monitors.

QR Code From File

const file = e.target.files[0];
const result = this.qr_reader.readBarCodeFromFile(file);

Error Handling

this.qr_reader.on('error', (e) => {
	console.log(e);
});
Errors

Stream already initialised. Occurs when scan() method is called contiguously.

DOM Exception. Permission denied. Occurs when the user has not given your site permission. Error. Permission denied. Please update browser permissions to access camera. is written to the canvas in this event. Notifying the user.

Browser does not support getUserMedia Occurs when a browser does not support webRTC. Error. Your browser does not support camera access. Use a modern browser or update your browser. is written to the canvas in this event. Notifying the user.

Stream was not initialised Occurs when stop() method is called before scan() method.

Reader isn't initialised Occurs when readBarCodeFile is called before wasm module is loaded. (Uncommon)

Known Issues

Trying to set a canvas size that is of a higher resolution than the device camera can deliver, undefined behaviour occurs.

Calling stop() before the reader could fully initialise causes a bug where the last stream is always on. Meaning the user camera stays on and calling stop() changes nothing.