1 个稳定版本
使用旧的 Rust 2015
1.8.1 | 2023 年 8 月 20 日 |
---|
865 在 图像 中排名
1,625 每月下载量
用于 agb
59KB
831 行
QR 码生成库 - Rust,无堆栈
简介
本项目旨在成为最好的、最清晰的 QR 码生成库。主要目标是灵活的选项和绝对正确性。次要目标是紧凑的实现大小和良好的文档注释。
主页带有实时 JavaScript 演示、详细描述和竞争对手比较: https://www.nayuki.io/page/qr-code-generator-library
功能
核心功能
- 与竞争对手库相比,代码更短,但文档注释更多
- 支持按照 QR 码模型 2 标准编码所有 40 个版本(大小)和所有 4 个纠错等级
- 输出格式:QR 符号的原始模块/像素
- 比其他实现更准确地检测类似定位图案的惩罚模式
- 在比普通文本更少的空间内编码数字和特殊字母数字文本
- 完全避免堆栈分配(例如
std::vec::Vec
),而是依赖于调用者提供的适当大小的缓冲区和固定大小的堆栈分配 - 开源代码,采用宽松的 MIT 许可证
手动参数
- 用户可以指定允许的最小和最大版本号,然后库将自动选择适合数据的范围内的最小版本
- 用户可以手动指定掩码模式,否则库将自动评估所有 8 个掩码并选择最佳者
- 用户可以指定绝对纠错等级,或者允许库在增加版本号的情况下提高它
- 用户可以手动创建数据段列表并添加 ECI 段
有关 QR 码技术和该库设计的更多信息,请参阅项目主页。
示例
extern crate qrcodegen;
use qrcodegen::Mask;
use qrcodegen::QrCode;
use qrcodegen::QrCodeEcc;
use qrcodegen::Version;
// Text data
let mut outbuffer = vec![0u8; Version::MAX.buffer_len()];
let mut tempbuffer = vec![0u8; Version::MAX.buffer_len()];
let qr = QrCode::encode_text("Hello, world!",
&mut tempbuffer, &mut outbuffer, QrCodeEcc::Medium,
Version::MIN, Version::MAX, None, true).unwrap();
let svg = to_svg_string(&qr, 4); // See qrcodegen-demo
// Binary data
let mut outbuffer = vec![0u8; Version::MAX.buffer_len()];
let mut dataandtemp = vec![0u8; Version::MAX.buffer_len()];
dataandtemp[0] = 0xE3;
dataandtemp[1] = 0x81;
dataandtemp[2] = 0x82;
let qr = QrCode::encode_binary(&mut dataandtemp, 3,
&mut outbuffer, QrCodeEcc::High,
Version::new(2), Version::new(7),
Some(Mask::new(4)), false).unwrap();
for y in 0 .. qr.size() {
for x in 0 .. qr.size() {
(... paint qr.get_module(x, y) ...)
}
}
更完整的示例集: https://github.com/nayuki/QR-Code-generator/blob/master/rust-no-heap/examples/qrcodegen-demo.rs .