跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Rust算法

Rust 二维码艺术生成器:从原理到实战

基于 Rust 实现的二维码艺术生成器项目,利用 qrcode 和 image 库将传统黑白矩阵转化为彩色像素画。文章详细讲解了基础生成逻辑、像素样式定制(方形/圆形/圆角)、智能颜色哈希算法及彩虹渐变效果的代码实现。重点阐述了如何在保证可扫描性的前提下平衡美观与功能,提供了完整的命令行使用示例与设计原则。

刀狂发布于 2026/2/28更新于 2026/7/738 浏览
Rust 二维码艺术生成器:从原理到实战

二维码早已渗透进生活的方方面面,从支付到链接跳转几乎无处不在。但你是否想过,这些黑白方块除了功能强大,还能变得更有艺术感?今天分享一个用 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. 彩色支持

传统的二维码只有黑白两色,为了个性化,我们允许用户指定颜色方案。对于未预定义的颜色,可以用一个简单的哈希算法生成一致的色彩值。

// 简单的哈希函数生成固定颜色
let mut hash: u32 = 0;
for byte in input.bytes() {
    hash = hash.wrapping_mul(31).wrapping_add(byte as u32);
}
// 从哈希值提取 RGB
let r = (hash & 0xFF) as u8;
let g = ((hash >> 8) & 0xFF) as u8;
let b = ((hash >> 16) & 0xFF) as u8;

这样即使输入不同,同一内容生成的颜色也是一致的,方便调试。

4. 彩虹效果

如果想让二维码更炫酷,可以加上彩虹渐变。核心思路是根据坐标计算 HSV 色相,再转成 RGB。

fn get_rainbow_color(x: u32, y: u32, size: u32) -> Rgba<u8> {
    let pos = ((x + y) as f32 / (size * 2) as f32) * 255.0;
    let hue = pos as u8;
    // 此处省略 HSV 到 RGB 的具体转换逻辑
    // ...
}

实际运行时要注意色相范围不要溢出,否则颜色会跳变。

使用示例

项目编译好后,通过 cargo run 即可生成不同风格的二维码。

基础黑白版

cargo run -- --url "https://github.com" --output github.png

基础黑白二维码

圆形像素风格

cargo run -- --url "https://github.com" --style circle --output circle_qr.png

圆形像素风格

彩虹效果

cargo run -- --url "https://github.com" --rainbow --output rainbow_qr.png

彩虹效果二维码

组合效果

当然,你也可以把圆形和彩虹结合起来。

cargo run -- --url "https://github.com" --style circle --rainbow --output rainbow_circle_qr.png

组合效果

设计原则

艺术化不是乱来,得保证能扫出来。有几个关键点要平衡好:

  1. 对比度:深色和浅色模块之间要有足够反差,否则扫码枪识别困难。
  2. 清晰度:别用太复杂的纹理,保持图案干净。
  3. 尺寸:适当放大像素尺寸能让细节更清晰。
  4. 颜色:避开相近色系,比如深蓝配浅蓝就不行。

总结

这个项目虽然看起来简单,但涵盖了从需求分析、技术选型、实现细节到问题解决的完整流程。通过它,不仅加深了对 Rust 语言的理解,也掌握了二维码的内部结构和图像处理的基础知识。即使是像二维码这样常见的技术,只要肯动脑筋,也能玩出花样。如果你感兴趣,不妨试试自己动手实现一个,或者在此基础上添加更多有趣的功能。

目录

  1. 为什么选 Rust
  2. 核心实现思路
  3. 1. 基础二维码生成
  4. 2. 自定义像素样式
  5. 3. 彩色支持
  6. 4. 彩虹效果
  7. 使用示例
  8. 基础黑白版
  9. 圆形像素风格
  10. 彩虹效果
  11. 组合效果
  12. 设计原则
  13. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Mac 系统下 Stable Diffusion WebUI 本地部署指南
  • 微信朋友圈批量发送与自动同步工具使用指南
  • AI Agent 落地实战:9 步全流程搭建指南
  • LLaMA-Factory 微调 Qwen3-VL 详细流程
  • OpenClaw 部署指南:环境搭建、模型接入与飞书机器人配置
  • HarmonyOS 凹陷圆形底部导航组件 rc_concave_tabbar 实战指南
  • iOS 网络安全实战:HTTPS 通信与证书锁定防抓包
  • Isaac Lab 机器人强化学习:配置架构、添加流程与调参技巧
  • AI 应用开发不只是调接口:从实战看技术深度与工程体系
  • Go 语言字符串切片相等性判断指南
  • STM32 标准库、HAL 库与 LL 库静态库创建实战指南
  • Flutter-OH开发利器:12个精选开源仓库全解析
  • 人工智能(AI)常见面试题及答案汇总
  • 基于 Python 的 GitHub 热门项目 AI 分析 Agent 设计与实现
  • 漏洞挖掘入门教程:从零基础到精通的完整指南
  • DApp 开发全流程:从合约设计到前端交互落地
  • RAG 评估指南:解析评估指标与代码示例
  • 鸿蒙系统开发技术指南:ArkTS、ArkUI与Stage模型详解
  • 本地使用ComfyUI运行Stable Diffusion 3.5
  • 皮带输送机 7×24h 全域智能巡检机器人方案

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online