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

Rust 实现二维码艺术生成器:设计与实现

Rust 实现二维码艺术生成器:设计与实现。项目利用 qrcode、image 和 clap 库,实现了基础二维码生成、自定义像素样式(方形、圆形、圆角)、彩色支持及彩虹效果渲染。通过命令行参数控制输出风格,平衡美观性与扫描识别率。文章展示了核心代码逻辑,包括颜色哈希算法与 HSV 转换思路,为开发者提供了将技术实用性与视觉创意结合的实现参考。

漫步发布于 2026/2/4更新于 2026/7/202.1K 浏览
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. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Linux 网络基础:协议分层与传输流程
  • 政务智能体工作流导出导入实战:以 12345 热线分拨为例
  • C++ 面试核心知识点总结:语法、内存与 STL
  • MySQL 核心数据类型深度解析
  • Java Web 拦截机制:Filter 与 Interceptor 深度解析
  • 零配置运行 GPT-OSS 20B:开箱即用 WebUI 部署方案
  • 优化 AI 生成前端 UI 的 3 个实战技巧
  • JavaScript 进阶篇:DOM、事件流与 BOM 详解
  • 通义万相 2.1 多模态 AI 生成模型技术解析与应用场景
  • C#初级开发者应对 AI 预测重构的策略与实战技巧
  • 资深安全工程师:十年自学经验与成长路径指南
  • 使用 Anthropic Skill 提升大模型前端设计质量
  • AI 时代内存价格暴涨背后的能源、隐私与绿色技术趋势
  • 基于 Coze 构建专属 AI 应用:从智能体开发到 Web 部署实战
  • AI 应用开发不仅是调接口:从面试看技术深度与工程实践
  • ControlNet-sd21 的入门与实战思路
  • VS Code 禁用 Copilot 自动补全,专注算法训练
  • 因果推断实战:CATE 条件平均处理效应五大估计方法与 Python 模拟
  • FPGA H.264 低延时编解码方案:基于 Xilinx Zynq 实现 RTP 推流与 HDMI 输入编码
  • 二分查找进阶:寻找峰值、旋转数组最小值与缺失数字

相关免费在线工具

  • 加密/解密文本

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