二维码早已渗透进生活的方方面面,从支付到链接跳转几乎无处不在。但你是否想过,这些黑白方块除了功能强大,还能变得更有艺术感?今天分享一个用 Rust 实现的二维码艺术生成器项目,带你看看如何把枯燥的矩阵变成有趣的像素画。
为什么选 Rust
系统编程和内存安全是 Rust 的核心优势,用它来处理图像生成既高效又稳定。项目中主要依赖三个成熟的库:
- qrcode:负责生成二维码数据矩阵
- image:处理图像绘制与保存
- clap:构建命令行参数解析
有了这些基础,我们可以把精力集中在核心逻辑上。
核心实现思路
1. 基础二维码生成
第一步是把 URL 转换成二维码数据。这里不需要复杂的算法,qrcode 库已经帮我们做好了大部分工作。
// 创建二维码实例
let code = QrCode::new(args.url.as_bytes())?;
// 获取颜色矩阵
let modules = code.to_colors();
拿到矩阵后,我们需要遍历每个模块(module),根据它是深色还是浅色来决定在画布上怎么画。
2. 自定义像素样式
为了让二维码不那么单调,我实现了三种常见的像素风格:方形、圆形和圆角矩形。这部分逻辑其实是在像素级别做替换。
match style {
"circle" => draw_circle_mut(img, px, py, pixel_size, color),
"rounded" => draw_rounded_square_mut(img, px, py, pixel_size, color),
_ => {
// 默认方形填充
for dy in 0..pixel_size {
for dx in 0..pixel_size {
let pixel_x = px + dx;
let pixel_y = py + dy;
img.put_pixel(pixel_x, pixel_y, color);
}
}
}
}
注意这里的循环逻辑,如果是圆角或圆形,需要计算边界点,避免画出界或者形状变形。
3. 彩色支持
传统的二维码只有黑白两色,为了个性化,我们允许用户指定颜色方案。对于未预定义的颜色,可以用一个简单的哈希算法生成一致的色彩值。






