Commit Graph

7 Commits

Author SHA1 Message Date
Serendipity c7d5252651 feat: CLI 编码模式 + 批量生成 + text_builder
- 新增 core/src/text_builder.rs — Rust 版文本构造(WiFi/vCard/Email/Phone/SMS)
- CLI 新增 --mode 模式参数(wifi/vcard/email/phone/sms/url/batch)
- CLI 新增 --ssid/--password/--name/--phone/--to 等模式专属参数
- CLI 新增 --batch <file> 批量生成(JSON 数组 / CSV)
- 批量支持自动检测 JSON/CSV 格式并自动编号输出
- 新增 6 个 text_builder 单元测试(80 tests total)
2026-06-19 21:15:55 +08:00
Serendipity effc88c6d7 feat: QR 码解码器 — 从零手写的完整解码流水线
新增 core/src/decoder/ 模块(9 文件,~1500 行):
- bch.rs: BCH(15,5)+BCH(18,6) 查表解码(32+64 有效码字,t≤3)
- format.rs: 从矩阵读取格式信息(EC+掩码)+版本信息(2 副本容错)
- extract.rs: 逆向蛇形排列提取数据码字
- deinterleave.rs: 逆向 RS 数据交错
- rs_decode.rs: RS 纠错流水线(伴随式→BM→Chien→Forney)
- mode_decode.rs: 逆向 4 种编码模式(数字/字母/字节/汉字 Shift JIS)
- detect.rs: 定位图案检测(1:1:3:1:1 比例+交叉验证+聚类)
- image.rs: 图像加载+灰度二值化(PNG/JPEG/WebP)
- mod.rs: 顶层 API(decode_image + decode_matrix)

修改已有文件:
- core: galois.rs 表 pub(crate), 新增 poly_eval(); reed_solomon 公开内部函数
- cli: 新增 --decode <file> 解码模式
- web: 新增 POST /api/decode(multipart file upload)

测试: 72 passed (58 原有 + 14 新增 decoder 测试)
2026-06-19 20:36:12 +08:00
Serendipity 6ba79a99d3 feat: 新增 web 端 — axum HTTP 服务 + Docker 化
新增 workspace crate :
- axum 0.8 + tokio 异步 HTTP 服务
- / → 嵌入式 HTML 页面(输入→实时预览→下载/复制)
- /api/qr?text=&level=M&margin=4&size=8 → PNG
- Dockerfile: rust-alpine 多阶段构建,镜像仅 ~12MB
- Cargo.toml: workspace 新增 web 成员

部署:
  docker build -t qrgen-web -f web/Dockerfile .
  docker run -p 3000:3000 qrgen-web

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 11:42:20 +08:00
Serendipity 05b1714628 fix: QR 扫描失败 + GUI 导出失败 — PNG margin + separator + fs 插件
🔴 QR 扫描失败根因 (2项):
- render/png: saturating_sub 导致 margin 区域映射到 finder 黑角,
  quiet zone 全黑,扫描器无法定位 QR
- matrix/patterns: 缺少右上 finder 左侧 + 左下 finder 顶部
  隔离带预留,数据模块破坏 finder 检测比率(1:1:3:1:1)

🔴 GUI 导出失败 (2项):
- gui/Cargo.toml + gui/lib.rs: 注册 tauri-plugin-fs 后端插件
  (前端 writeFile 调用缺少 Rust handler)
- capabilities: fs:allow-write-file + $HOME/** 路径 scope
  (ACL 默认不给 fs 写权限,需显式声明)

🔧 其他:
- ExportPanel: 导出失败显示红色错误信息(替代静默吞错)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 11:21:27 +08:00
Serendipity 4d3147a1e9 feat: Tauri 2 + React 脚手架 — gui crate 2026-06-17 00:18:39 +08:00
Serendipity 95e3cc91ff chore: workspace 加 gui 成员,qr-core 加 serde 2026-06-17 00:10:18 +08:00
Serendipity ad77b3ac1b feat: workspace 骨架 — core + cli 模块结构 2026-06-16 23:27:58 +08:00