7f3b8b4cc7
- README: 测试数 81、输出格式表 + vCard 10字段、透视矫正、格式扩展 - CHANGELOG: v0.3.0 条目(格式扩展+解码增强+vCard扩展) - ROADMAP: v0.2.0/v0.3.0 移至已交付,更新下一版本规划 - CLAUDE.md: 测试 81→105、perspective.rs 模块、Web fmt 参数
4.7 KiB
4.7 KiB
Changelog
0.3.0 (2026-06-19)
Added
- 格式扩展 — 新增 BMP/JPEG/WebP 图像输出
core/src/render/image.rs:OutputFormat枚举 (Png/Bmp/Jpeg/WebP)QrCode::to_image_bytes()— 参数化格式输出- CLI
-f/--format(png/bmp/jpeg/webp) - Web API
fmt参数扩展至全部 4 种格式
- 解码增强 — 透视矫正
core/src/decoder/perspective.rs:旋转矫正流水线- 自动检测 finder → 计算旋转角 → 仿射变换 → 再解码
decode_image自动重试矫正路径
- vCard 扩展 — 新增 5 字段
- TITLE(职位)/ URL(网址)/ BDAY(生日)/ NOTE(备注)/ PHOTO(照片)
- Rust
text_builder+ TypeScriptqrText+ VCardMode UI 同步 - CLI 新增
--title--vcard-url--birthday--note--photo - 中/英 i18n 翻译
Changed
core/src/render/png.rs→image.rs(格式无关化)QrCode::to_png_bytes保留为to_image_bytes的便捷方法
0.1.0 (2026-06-19)
Added
- 核心算法:完整实现 ISO/IEC 18004 QR 码生成
- GF(2⁸) Galois 域运算(预计算 exp/log 表,0x11D 本原多项式)
- Reed-Solomon 纠错编码(动态生成多项式 + 多项式长除法 + 数据交错)
- 四种编码模式:数字 / 字母数字 / 字节 / 汉字 (Shift JIS)
- 字符串自动分段 + 最优模式选择
- 8 种标准掩码 + 四规则惩罚评分(连续同色/2×2 方块/伪定位图案/暗模块占比)
- 格式信息 BCH(15,5) + 版本信息 BCH(18,6) 编码
- 40 版本 × 4 纠错级别完整容量表
- CLI 命令行工具 (
qrgen)- PNG/SVG/终端 ASCII 三种输出
- 可调纠错级别、版本号、模块大小、白边
- 反色模式、路径遍历防护
- GUI 桌面应用 (
qrgen-gui)- Tauri 2 + React 18 + TypeScript + TailwindCSS
- 7 种编码模式:文本 / URL / WiFi / vCard / Email / 电话 / SMS
- 实时预览(200ms 防抖)、历史记录(50 条 + 持久化)
- PNG/SVG 导出 + 复制到剪贴板
- WiFi 密码脱敏、错误提示
- 暗色模式(跟随系统)、磨砂玻璃效果
- Web 服务 (
qrgen-web)- axum 0.8 + tokio HTTP 服务
- 内嵌 GUI 风格 HTML 页面(三栏 + 7 模式 + 实时预览)
- REST API:
GET /api/qr→ PNG / SVG - Docker: rust-alpine 多阶段构建 → 17.7MB 镜像
- docker-compose: 资源限制 + 健康检查 + 日志轮转
- 程序库 (
qr-core)- 零外部 QR 依赖(仅 image crate 用于 PNG 输出)
- 自动版本选择
- 完整 40 版本 × 四级纠错支持
- QR 解码器 (
core/src/decoder/)- 从零手写的完整解码流水线(图像→定位→提取→纠错→解码→文本)
- BCH(15,5) + BCH(18,6) 查表解码(t≤3 位纠错)
- Reed-Solomon 纠错流水线(伴随式→Berlekamp-Massey→Chien→Forney)
- 定位图案检测(1:1:3:1:1 比例扫描+聚类)
- 逆向 4 种编码模式(数字/字母/字节/汉字 Shift JIS)
- CLI
--decode <file>/ WebPOST /api/decode/ GUI 文件解码 - PNG/JPEG/WebP 多格式图像输入
Fixed
- QR 扫描失败:修复 PNG margin
saturating_sub导致 quiet zone 全黑(扫描器无法定位) - QR 扫描失败:修复 finder pattern separator 缺少左侧和顶部预留(数据模块破坏 finder 检测比率 1:1:3:1:1)
- GUI 导出失败:修复
tauri-plugin-fs插件未注册(writeFile 调用无后端 handler) - GUI 导出 ACL:修复
fs:allow-write-file缺少路径 scope - GUI 预览模糊:修复 SVG size=1 拉伸到 216px 导致的模糊
- 历史记录:删除/清空后持久化到 store、WiFi 密码脱敏、点击回填用 formData
- CSP:从 null 改为最小权限策略
- CLI 安全:添加路径遍历防护
- Kanji 编码:修复 Shift JIS 第二字节空洞、fallback 段内模式混用
- 编码器:
encode_numeric/encode_alphanumeric添加 debug_assert 前置条件 - SVG 渲染:
dangerouslySetInnerHTML改为<img>+ data URL - Web 界面:预览改用 PNG size=8 避免拉伸模糊
Technical
- Cargo workspace 四层架构 (core + cli + gui + web)
- Tauri v2 capabilities + ACL 权限配置
- qr-core:Serde 序列化支持(跨 IPC 传输)
- GUI:React Context + useReducer,共享文本构造工具 (utils/qrText.ts)
- CLI:clap derive + anyhow 错误处理
- Web:axum 0.8 + tokio,编译期 HTML 嵌入 (include_str!)
- 105 个测试(81 单元 + 24 集成)
- NSIS Windows 安装包 + Docker Alpine 镜像
- 文档:API doc comments(rustdoc 可用)+ 3 个代码示例
- 社区:CONTRIBUTING / CODE_OF_CONDUCT / SECURITY / Issue & PR 模板
- 工程:.editorconfig / MSRV=1.87 / crates.io 就绪