# 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` + TypeScript `qrText` + 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 ` / Web `POST /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` 改为 `` + 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 就绪