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

基于 Rust 的二维码艺术生成器实现

使用 Rust 开发二维码艺术生成器的过程。项目利用 qrcode、image 和 clap 库,实现了基础二维码生成、自定义像素样式(方形、圆形、圆角)、彩色支持及彩虹效果。文章提供了命令行使用示例,并总结了艺术化设计原则,如对比度与清晰度平衡。通过该项目,展示了 Rust 在图像处理与 CLI 工具开发中的应用潜力。

孤勇者发布于 2026/3/27更新于 2026/10/20110 浏览
基于 Rust 的二维码艺术生成器实现

二维码已经渗透到我们生活的方方面面,从支付到网站链接,几乎无处不在。但普通的黑白二维码虽然功能强大,看起来有些单调。本文分享使用 Rust 实现的二维码艺术生成器(qr-artist)项目。

项目起源

这个想法源于一个简单的需求:如何让二维码既实用又美观?我想,能不能让二维码变得更有艺术感,比如用彩色像素来呈现?

技术选型

我选择了 Rust 作为开发语言,因为它在系统编程方面的优秀表现和内存安全特性。项目中主要使用了以下几个库:

  1. qrcode - 用于生成二维码数据
  2. image - 用于图像处理和保存
  3. 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.put_pixel(pixel_x, pixel_y, color);
            }
        }
    }
}
3. 彩色支持

为了让二维码更加个性化,我添加了彩色支持。用户可以通过命令行参数指定不同的颜色方案来表示深色和浅色区域。

对于未预定义的颜色,我们还实现了一个智能颜色生成算法,确保任何输入都能产生有效的颜色:

// Simple hash function to generate consistent colors
let mut hash: u32 = 0;
for byte in input.bytes() {
    hash = hash.wrapping_mul(31).wrapping_add(byte as u32);
}
// Generate RGB values from hash
let r = (hash & 0xFF) as u8;
let g = ((hash >> 8) & 0xFF) as u8;
let b = ((hash >> 16) & 0xFF) as u8;
4. 彩虹效果

为了让二维码更加炫酷,我还添加了彩虹效果,通过算法将不同位置的深色模块渲染成不同的彩虹颜色:

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 -- --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. 项目起源
  2. 技术选型
  3. 核心实现
  4. 1. 基础二维码生成
  5. 2. 自定义像素样式
  6. 3. 彩色支持
  7. 4. 彩虹效果
  8. 使用示例
  9. 生成基础黑白二维码
  10. 生成圆形像素风格
  11. 生成彩虹效果二维码
  12. 结合多种效果
  13. 艺术化设计原则
  14. 总结

更多推荐文章

查看全部
  • 使用 Chain-of-Thought 让大模型思考过程可见
  • “喝完咖啡代码就写好?”微软Copilot营销翻车:开发者质疑与工程现实脱节
  • DeepSeek-R1 本地对话机器人部署与实战体验
  • OpenClaw 开源 AI 智能体安装与配置指南
  • 基于 Node.js 的 Claude AI 本地环境配置指南
  • Testsigma 开源自动化测试平台容器化部署指南
  • Java 调用 OCR 接口指南:Spring Boot 整合实战
  • Python APP 反爬实战:Frida+Charles 抓包与签名校验破解
  • Rust 所有权系统是为了解决什么问题
  • OpenClaw 部署指南:接入 Minimax/DeepSeek 与飞书机器人
  • Anthropic Skills 详解:面向 AI 的插件生态与技能构建
  • Luma AI Dream Machine 视频生成模型评测与使用指南
  • MyBatis 动态 SQL 标签详解
  • Pyenv 指定 Python 版本:灵活对接 Miniconda 环境
  • Android 开发中 Kotlin 架构演进:从 MVC 到 MVVM
  • Linux 零基础入门:掌握操作系统核心概念
  • 非科班出身:工作十年后转行程序员,35 岁依然不焦虑
  • PX4 无人机 MID360 配合 FAST_LIO 实现自主飞行与定点配置
  • Cline 集成 DeepSeek:开源 AI 编程助手助力终端与 Web 开发
  • Java 环境搭建与首个 Hello World 程序实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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