#qr #year #generation #again #codes #generator #svg

bin+lib rqr

这是我为了在长时间离开后再次涉足 Rust 而创建的一个小二维码生成项目。

2 个版本

0.1.1 2019 年 4 月 16 日
0.1.0 2019 年 4 月 16 日

图像 中排名第 666

MIT 许可证

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