docs: README 修复数字 + mermaid 图完整 + 解码示例

- 测试数 58→72,Tauri commands 5→6
- mermaid 架构图新增 Decoder 层 + Web decode 端点
- mermaid 数据流水线新增解码逆向流程
- 库调用示例新增 decode_image 用法
This commit is contained in:
2026-06-19 20:47:24 +08:00
parent 797a41ea50
commit 3d11ba2446
+28 -7
View File
@@ -44,23 +44,25 @@ graph TB
subgraph Web["Web 服务 (axum)"]
HTML[内嵌 HTML 页面]
API[GET /api/qr]
API[GET /api/qr + POST /api/decode]
end
subgraph CLI["CLI 命令行"]
Clap[clap 参数解析]
Clap[clap 编码 + --decode 解码]
end
subgraph IPC["Tauri IPC 桥接"]
Commands[5 个 Tauri commands]
Commands[6 个 Tauri commands]
end
subgraph Core["Rust core 库 (qr-core)"]
Encoder[编码层]
Decoder[解码层]
ECC[纠错层]
Matrix[矩阵层]
Render[渲染层]
Encoder --> ECC
Decoder --> ECC
ECC --> Matrix
Matrix --> Render
end
@@ -94,6 +96,19 @@ sequenceDiagram
M->>M: 功能图案 + 蛇形排列 + 掩码
M->>R: QR 矩阵
R->>UI: PNG / SVG / ASCII
Note over U,R: --- 解码流水线 (逆向) ---
U->>UI: 上传图片
UI->>Q: decode_image(bytes)
Q->>R: 图像二值化 + 定位图案检测
R->>M: 布尔矩阵
M->>M: 读取格式/版本信息 + 解掩码 + 蛇形提取
M->>RS: 数据码字 + 纠错码字
RS->>RS: 去交错 + 伴随式 + Berlekamp-Massey + Chien + Forney
RS->>E: 纠错后数据码字
E->>E: 模式解码(数字/字母/字节/汉字)
E->>UI: 解码文本
```
## 功能
@@ -192,7 +207,7 @@ cargo run -p qrgen -- "Hello World"
cargo run -p qrgen-web # → http://localhost:3000
# Rust 测试
cargo test # 58 unit
cargo test --lib # 72 unit
# 前端测试
cd gui/src-frontend && pnpm test # vitest
@@ -267,7 +282,7 @@ QRGen/
│ ├── capabilities/default.json # ACL 权限
│ ├── src/
│ │ ├── main.rs # Windows 子系统入口
│ │ └── lib.rs # 5 个 Tauri commands
│ │ └── lib.rs # 6 个 Tauri commands
│ ├── src-frontend/ # React 前端
│ │ └── src/
│ │ ├── App.tsx # 主布局(三栏+底部输入)
@@ -316,15 +331,21 @@ cargo run --example high_ecc
cargo run --example custom_config
```
作为程序库使用:
作为程序库使用(编码 + 解码)
```rust
use qr_core::qr::{QrCode, QrConfig};
use qr_core::decoder;
// 编码:文本 → QR
let qr = QrCode::encode("Hello QR!", QrConfig::default())?;
println!("{}", qr.to_ascii(false)); // 终端预览
qr.to_png_bytes(8)?; // PNG 字节
let svg = qr.to_svg(); // SVG 字符串
// 解码:QR 图片 → 文本
let bytes = std::fs::read("qr.png")?;
let result = decoder::decode_image(&bytes)?;
println!("解码结果: {}", result.text);
```
## 发布到 crates.io