Serendipity
|
bd4ca718ac
|
feat: 解码器全面增强 — 多遍二值化 + 4点透视 + ECI/FNC1
Phase 1 — 二值化+检测增强:
- decoder/image.rs 重写: 中位数→Otsu→Sauvola 三遍自适应阈值
- 新增 load_gray() 公共 API 供调用方自定义预处理
- 反色QR码自动检测(5点采样法)
- 静区验证 + 包围盒(BoundingBox) + 解码置信度评分
- 定位图案比例偏差计算
Phase 2 — 4点透视变换+多QR码:
- decoder/perspective.rs 重写: DLT求解3x3单应矩阵
- 用3个定位图案+推算第4点构建4点对应
- 双线性插值替换最近邻采样
- 多角度旋转回退(7个预设角度)
- decode_all() 返回图像中所有QR码(按置信度降序)
Phase 3 — ISO合规:
- decoder/bch.rs: decode_format_info/version_info 返回汉明距离
- decoder/format.rs: 副本冲突时选汉明距离更小者
- decoder/mode_decode.rs: ECI指派号识别, FNC1/GS1检测(0101/1001)
- 结构化追加(0011)头部提取: position/total/parity
- DecodeResult 扩展: is_gs1, eci_designator, structured_append
验证: cargo check+clippy通过, 81+24测试全部通过
|
2026-06-21 16:00:11 +08:00 |
|
Serendipity
|
cd75141037
|
refactor: P0-P5 全面架构重构
P1 thiserror 类型化错误:
新增 core/src/error.rs QrError 枚举, 全链 String -> QrError,
包括 EmptyInput/InvalidVersion/DataTooLong/DecodeFail 等 8 种变体
P2 text_builder Tauri 统一:
新增 build_qr_text Tauri command, 删除前端 qrText.ts,
所有 mode 组件改为 invoke 调用 Rust 端构建文本
P3 QrConfig 颜色字段移除:
从 QrConfig/QrCode 移除 fg_color/bg_color,
改为 to_svg/to_image_bytes 参数传递
P4 前端 4 项合并:
Context 拆分为 StateContext+DispatchContext (H10),
新建 useModeForm 通用 hook (M11),
VCardMode grid-cols-2 网格布局 (M13),
persistHistory/loadHistory 迁至 utils/storage.ts (L9)
P5 算法优化:
MaskedView 懒计算替代 8 次 Matrix 克隆 (H9),
encoding_rs 精确 Kanji Shift JIS 映射 (H12)
验证: cargo check+clippy 通过, 81+24+7 全部测试通过
|
2026-06-21 15:09:10 +08:00 |
|
Serendipity
|
e6a7efc760
|
refactor: CLI P0-P2 全面改进
P0:
- 子命令重构: qrgen encode / qrgen decode
- Shell 补全: --generate-completions bash/zsh/fish/pwsh/elvish
- -v 改为 -V (version), Cli::version 继承 Cargo.toml
P1:
- stdin 管道: encode/decode 支持 - 从 stdin 读取
- 退出码: 0=成功, 1=输入错误, 2=系统错误
- 错误消息: bail! 宏 + 上下文信息
P2:
- 进度指示: batch 模式使用 indicatif 进度条
- --version 自动生成
新增依赖: clap_complete, indicatif, image (direct)
|
2026-06-20 17:48:17 +08:00 |
|
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 |
|