项目背景
二维码早已融入生活,从支付到链接跳转无处不在。但传统的黑白方块往往显得单调,能否在保持功能的同时增加视觉美感?本文分享一个基于 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);
}
}
}
}
这里需要注意边界计算,确保不同尺寸下形状不会越界或变形。
智能配色方案
除了黑白,还支持自定义深色与浅色。对于未预设的颜色,使用哈希算法生成一致的色彩,避免随机性导致同一内容多次生成结果不一致:
// 简单哈希函数生成稳定颜色
: = ;
input.() {
hash = hash.().(byte );
}
= (hash & ) ;
= ((hash >> ) & ) ;
= ((hash >> ) & ) ;



