二维码早已渗透生活,从支付到链接几乎无处不在。但黑白方块难免单调,如何让它们兼具实用与美感?最近我用 Rust 实现了一个小项目,尝试将二维码转化为艺术图像。
技术选型
选择 Rust 主要看重其内存安全与系统级性能。项目依赖三个成熟库:qrcode 负责数据编码,image 处理像素渲染,clap 构建命令行交互。这些工具链完善,让我能聚焦核心逻辑。
核心实现
基础渲染流程
核心思路是将 URL 转为二维码矩阵,再映射为图像像素。初始化时先校验输入,随后生成模块数据:
// 创建二维码实例
let code = QrCode::new(args.url.as_bytes())?;
// 获取颜色矩阵
let modules = code.to_colors();
样式定制
为了增加趣味性,我实现了三种像素形态。默认是方形,但也支持圆形或圆角矩形。这部分逻辑在绘制循环中通过模式匹配控制:
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);
}
}
}
}
实际运行时要注意,圆形和圆角需要计算边界,避免锯齿过于明显。
色彩方案
除了黑白,用户可指定自定义颜色。对于未预设的方案,程序会基于输入内容生成哈希值,进而映射为 RGB 分量,确保同一输入始终得到一致配色:
// 简单哈希函数生成稳定颜色
let mut hash: = ;
input.() {
hash = hash.().(byte );
}
= (hash & ) ;
= ((hash >> ) & ) ;
= ((hash >> ) & ) ;






