2 个版本
0.1.1 | 2019 年 4 月 16 日 |
---|---|
0.1.0 | 2019 年 4 月 16 日 |
在 图像 中排名第 666
120KB
2.5K SLoC
rqr
这是一个小的二维码生成项目,我在长时间离开后再次涉足 Rust。我一直对二维码的工作原理很感兴趣,这是一个很好的项目来探索 Rust。我遵循了一个优秀的教程来学习如何实现二维码生成器。
我不打算维护这个项目或添加新功能。您可以自由地查看代码以学习或将其分叉并对其进行操作。
与所有二维码库一样,在使用之前始终验证输出。
Cargo.toml
[dependencies]
rqr = "0.1.0"
示例
字符串生成
可以创建一个简单的字符串表示,如下所示
extern crate rqr;
use rqr::{Qr, StringRenderer};
fn main() {
let qr = Qr::new("HELLO WORLD").unwrap();
let s = StringRenderer::new().render(&qr);
println!("{}", s);
}
生成输出
#######....#..#######
#.....#.##..#.#.....#
#.###.#..#.##.#.###.#
#.###.#.#####.#.###.#
#.###.#.##.#..#.###.#
#.....#..#..#.#.....#
#######.#.#.#.#######
........##.##........
.#.####.##..###.##.#.
#.####.#....####.###.
..#.#.##...#..##.....
#.##.#...#.##...##...
##.########.###.#####
........#...#..#.#...
#######..##..##..####
#.....#.#.#..#..#.###
#.###.#.##.#..#...###
#.###.#.#.###...#.#..
#.###.#..#....#....##
#.....#.###..###..##.
#######..#.#.......#.
渲染可以自定义
let s = StringRenderer::new()
.light_module(' ')
.dark_module('X')
.module_dimensions(2, 1)
.render(&qr);
要生成
XXXXXXXXXXXXXX XX XXXXXXXXXXXXXX
XX XX XXXX XX XX XX
XX XXXXXX XX XX XXXX XX XXXXXX XX
XX XXXXXX XX XXXXXXXXXX XX XXXXXX XX
XX XXXXXX XX XXXX XX XX XXXXXX XX
XX XX XX XX XX XX
XXXXXXXXXXXXXX XX XX XX XXXXXXXXXXXXXX
XXXX XXXX
XX XXXXXXXX XXXX XXXXXX XXXX XX
XX XXXXXXXX XX XXXXXXXX XXXXXX
XX XX XXXX XX XXXX
XX XXXX XX XX XXXX XXXX
XXXX XXXXXXXXXXXXXXXX XXXXXX XXXXXXXXXX
XX XX XX XX
XXXXXXXXXXXXXX XXXX XXXX XXXXXXXX
XX XX XX XX XX XX XXXXXX
XX XXXXXX XX XXXX XX XX XXXXXX
XX XXXXXX XX XX XXXXXX XX XX
XX XXXXXX XX XX XX XXXX
XX XX XXXXXX XXXXXX XXXX
XXXXXXXXXXXXXX XX XX XX
SVG 生成
可以使用以下方法生成 SVG 文件
use rqr::{Qr, SvgRenderer, Color, ECLevel};
fn main() {
let qr = Qr::with_ecl("HELLO WORLD", ECLevel::Q).unwrap();
let s = SvgRenderer::new()
.light_module(Color::new(229, 189, 227))
.dark_module(Color::new(119, 0, 0))
.dimensions(200, 200)
.render(&qr);
println!("{}", s);
}
自定义 QR 值
您可以通过与构建器接口来覆盖推断的 QR 码默认值。通常,您只需要指定错误纠正级别,其他值会自动推断为最优。
let qr = QrBuilder::new()
.ecl(ECLevel::L)
.version(Version::new(3))
.mask(Mask::new(0))
.mode(Mode::Alphanumeric)
.into("1234567890")
.unwrap();
您还可以获得更细粒度的控制,例如通过构建器或直接针对矩阵添加原始位,以获得更细粒度的控制。
命令行界面
有一个简单的 CLI 可以使用。
它使用可选依赖项以避免将 arg 解析器依赖项引入库中,因此您需要使用 --features cli
标志来构建它。
例如,要在终端中打印二维码的格式化输出
> cargo run --features cli -- "HELLO WORLD"
██████████████ ██ ██████████████
██ ██ ████ ██ ██ ██
██ ██████ ██ ██ ████ ██ ██████ ██
██ ██████ ██ ██████████ ██ ██████ ██
██ ██████ ██ ████ ██ ██ ██████ ██
██ ██ ██ ██ ██ ██
██████████████ ██ ██ ██ ██████████████
████ ████
██ ████████ ████ ██████ ████ ██
██ ████████ ██ ████████ ██████
██ ██ ████ ██ ████
██ ████ ██ ██ ████ ████
████ ████████████████ ██████ ██████████
██ ██ ██ ██
██████████████ ████ ████ ████████
██ ██ ██ ██ ██ ██ ██████
██ ██████ ██ ████ ██ ██ ██████
██ ██████ ██ ██ ██████ ██ ██
██ ██████ ██ ██ ██ ████
██ ██ ██████ ██████ ████
██████████████ ██ ██ ██
或生成 SVG
> cargo run --features cli -- "HELLO WORLD" -t svg --bg '#e5bde3' \
--fg '#700' --width 200 > hello_world.svg
这个输出与上面的示例 SVG 代码相同。
依赖项
~3–4MB
~77K SLoC