二维码已经渗透到我们生活的方方面面,从支付到网站链接,几乎无处不在。但普通的黑白二维码虽然功能强大,看起来有些单调。本文分享使用 Rust 实现的二维码艺术生成器(qr-artist)项目。
项目起源
这个想法源于一个简单的需求:如何让二维码既实用又美观?我想,能不能让二维码变得更有艺术感,比如用彩色像素来呈现?
技术选型
我选择了 Rust 作为开发语言,因为它在系统编程方面的优秀表现和内存安全特性。项目中主要使用了以下几个库:
- qrcode - 用于生成二维码数据
- image - 用于图像处理和保存
- clap - 用于构建命令行界面
这些库都很成熟且文档完善,让我能够专注于核心功能的实现。
核心实现
1. 基础二维码生成
项目的核心是将 URL 转换为二维码数据,然后将其渲染为图像:
// 创建二维码
let code = QrCode::new(args.url.as_bytes())?;
// 获取二维码数据
let modules = code.to_colors();
2. 自定义像素样式
为了让二维码更有趣,我实现了几种不同的像素样式:
- 方形(square) - 默认样式,传统的方块
- 圆形(circle) - 圆润的点状样式
- 圆角矩形(rounded) - 方形但带有圆角
这部分的实现主要通过在每个像素位置绘制不同的形状来完成:
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.(pixel_x, pixel_y, color);
}
}
}
}






