Expand description
Zero-dependency QR code encoder + decoder with built-in PNG/PBM image I/O.
roka-qr covers ISO/IEC 18004 from end to end: byte / alphanumeric /
numeric mode encoding, all four error-correction levels (L/M/Q/H), all 40
versions, and decoding back from a PNG or PBM image without ever pulling in
an external crate.
§Quick start
Encode a string into a QR code and write it as PNG:
use roka_qr::{Encoder, EcLevel};
let code = Encoder::new(b"https://example.com").ec_level(EcLevel::M).build()?;
let bitmap = code.render().scale(8).quiet_zone(4).build();
let png_bytes = bitmap.to_png();Decode a QR code from PNG bytes:
use roka_qr::Reader;
let png_bytes: Vec<u8> = std::fs::read("qr.png").unwrap();
let code = Reader::from_png(&png_bytes)?;
let payload: &[u8] = code.payload();§Highlights
- Zero external crate dependencies —
stdonly. - Encode and decode in one crate — fills a gap on crates.io.
- Self-contained image I/O — PNG (encode + decode via built-in DEFLATE inflate) and PBM P1/P4.
- Round-trip tested against
qrencodeandzbarimg. - No
unsafe.
Structs§
- Bitmap
- A binary bitmap —
true= dark pixel. - Code
- An encoded or decoded QR code.
- Encoder
- Builder for QR code generation.
- Reader
- Decode a QR code from various input formats.
- Render
Builder - Builder returned by
Code::render. - Version
- QR version number, in the range 1..=40.