二维码已经渗透到我们生活的方方面面,从支付到网站链接,几乎无处不在。但你是否想过,这些黑白方块除了功能强大外,能否在视觉上更具表现力?最近我尝试用 Rust 构建了一个名为 qr-artist 的二维码艺术生成器,旨在探索如何在保持可扫描性的前提下提升视觉美感。
项目背景与选型
传统黑白二维码虽然实用,但视觉表现略显单调。我的目标是通过编程手段赋予其色彩和形态变化。选择 Rust 作为开发语言,主要是看重其在系统编程方面的性能优势以及内存安全性。项目依赖了几个成熟的第三方库:
- qrcode:负责核心二维码数据的编码与生成
- image:处理图像渲染、像素操作及文件保存
- clap:构建命令行参数解析界面
这些库文档完善,让我能专注于业务逻辑的实现。
核心实现逻辑
1. 基础数据生成
项目的起点是将 URL 转换为二维码矩阵数据。这一步相对直接,利用 qrcode 库即可快速完成。
// 创建二维码实例
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);
}
}
}
}


