fast_qr
is approximately 6-7 times faster than qrcode
, see benchmarks
You can create a QR as
- Raw matrix, well suited for custom usage
- Vectorized image, well suited for web usage
- Image, well suited for mobile / print usage
You can run the examples with:
cargo run --example simple
cargo run --example svg -F svg
cargo run --example image -F image
They are all explained in detail below.
use fast_qr::convert::ConvertError;
use fast_qr::qr::QRBuilder;
fn main() -> Result<(), ConvertError> {
// QRBuilder::new can fail if content is too big for version,
// please check before unwrapping.
let qrcode = QRBuilder::new("https://example.com/")
.build()
.unwrap();
let str = qrcode.to_str(); // .print() exists
println!("{}", str);
Ok(())
}
Converts QRCode
to SVG docs.rs
Note: It requires the svg
feature
use fast_qr::convert::ConvertError;
use fast_qr::convert::{svg::SvgBuilder, Builder, Shape};
use fast_qr::qr::QRBuilder;
fn main() -> Result<(), ConvertError> {
// QRBuilder::new can fail if content is too big for version,
// please check before unwrapping.
let qrcode = QRBuilder::new("https://example.com/")
.build()
.unwrap();
let _svg = SvgBuilder::default()
.shape(Shape::RoundedSquare)
.to_file(&qrcode, "out.svg");
Ok(())
}
Converts QRCode
to an image docs.rs
Note: It requires the image
feature
use fast_qr::convert::ConvertError;
use fast_qr::convert::{image::ImageBuilder, Builder, Shape};
use fast_qr::qr::QRBuilder;
fn main() -> Result<(), ConvertError> {
// QRBuilder::new can fail if content is too big for version,
// please check before unwrapping.
let qrcode = QRBuilder::new("https://example.com/")
.build()
.unwrap();
let _img = ImageBuilder::default()
.shape(Shape::RoundedSquare)
.background_color([255, 255, 255, 0]) // Handles transparency
.fit_width(600)
.to_file(&qrcode, "out.png");
Ok(())
}
npm install --save fast_qr
# Or
yarn add fast_qr
import init, { qr_svg } from "fast_qr";
import type { QrSvgOptions } from "fast_qr";
const options: QrSvgOptions = {
module_color: "#FFF",
background_color: "#000",
};
/// Once `init` is called, `qr_svg` can be called any number of times
// Using then / catch:
init()
.then(() => {
for (let i = 0; i < 10; i++) {
const svg = qr_svg("https://fast-qr.com", options);
console.log(svg);
}
})
.catch((e) => {
console.error("Could not fetch wasm: ", e);
});
// Or using modern async await:
await init();
for (let i = 0; i < 10; i++) {
const svg = qr_svg("https://fast-qr.com", options);
console.log(svg);
}
Package is named fast_qr
and can be installed like so :
npm install --save fast_qr
Find a bundled version in the latest release.
./wasm-pack.sh # Runs build in release mode and wasm-opt twice again
wasm-pack pack pkg # Creates an archive of said package
# wasm-pack publish pkg # Creates an archive & publish it to npm
According to the following benchmarks, fast_qr
is approximately 6-7x faster than qrcode
.
Benchmark | Lower | Estimate | Upper | |
---|---|---|---|---|
V03H/qrcode | 524.30 us | 535.02 us | 547.13 us | |
V03H/fast_qr | 82.079 us | 82.189 us | 82.318 us | fast_qr is 6.51x faster |
V10H/qrcode | 2.1105 ms | 2.1145 ms | 2.1186 ms | |
V10H/fast_qr | 268.70 us | 269.28 us | 269.85 us | fast_qr is 7.85x faster |
V40H/qrcode | 18.000 ms | 18.037 ms | 18.074 ms | |
V40H/fast_qr | 2.4313 ms | 2.4362 ms | 2.4411 ms | fast_qr is 7.40x faster |
More benchmarks can be found in /benches folder.