Files
QRGen/CHANGELOG.md
Serendipity 8298cd4c9c docs: 更新全部 markdown — CLI 子命令语法 + 新功能
- README: 所有 CLI 示例改为 qrgen encode/decode 子命令
- CHANGELOG: 新增 0.3.0 CLI 重构条目(子命令/stdin/退出码/进度条)
- CLAUDE.md: 更新 CLI 构建命令 + 架构描述
- CLI_USAGE.md: 完全重写完整参数列表 + stdin/补全/退出码章节
2026-06-20 17:52:21 +08:00

110 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog
## 0.3.0 (2026-06-20)
### Changed
- **CLI 重构** — 子命令结构 `qrgen encode` / `qrgen decode`
- 符合 Rust 生态惯例(ripgrep/fd/cargo 风格)
- Shell 补全支持(`--generate-completions bash/zsh/fish/pwsh/elvish`
- stdin 管道支持(`echo "text" | qrgen encode -`
- 退出码规范化(0=成功, 1=输入错误, 2=系统错误)
- `-v``-V`version),`-l` 保持不变
- 批量模式进度条(`indicatif` crate
- 新增依赖:`clap_complete``indicatif``image`
## 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 <file>` / 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` 改为 `<img>` + data URL
- **Web 界面**:预览改用 PNG size=8 避免拉伸模糊
### Technical
- Cargo workspace 四层架构 (core + cli + gui + web)
- Tauri v2 capabilities + ACL 权限配置
- qr-coreSerde 序列化支持(跨 IPC 传输)
- GUIReact Context + useReducer,共享文本构造工具 (utils/qrText.ts)
- CLIclap derive + anyhow 错误处理
- Webaxum 0.8 + tokio,编译期 HTML 嵌入 (include_str!)
- 105 个测试(81 单元 + 24 集成)
- NSIS Windows 安装包 + Docker Alpine 镜像
- 文档:API doc commentsrustdoc 可用)+ 3 个代码示例
- 社区:CONTRIBUTING / CODE_OF_CONDUCT / SECURITY / Issue & PR 模板
- 工程:.editorconfig / MSRV=1.87 / crates.io 就绪