diff --git a/CHANGELOG.md b/CHANGELOG.md
index e306b19..651b551 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,29 @@
# 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
@@ -65,7 +89,7 @@
- GUI:React Context + useReducer,共享文本构造工具 (utils/qrText.ts)
- CLI:clap derive + anyhow 错误处理
- Web:axum 0.8 + tokio,编译期 HTML 嵌入 (include_str!)
-- 96 个测试(72 单元 + 24 集成)
+- 105 个测试(81 单元 + 24 集成)
- NSIS Windows 安装包 + Docker Alpine 镜像
- 文档:API doc comments(rustdoc 可用)+ 3 个代码示例
- 社区:CONTRIBUTING / CODE_OF_CONDUCT / SECURITY / Issue & PR 模板
diff --git a/CLAUDE.md b/CLAUDE.md
index aca7ea0..c815b86 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -89,6 +89,7 @@ QRGen/
│ │ ├── rs_decode.rs # RS 纠错流水线
│ │ ├── mode_decode.rs # 逆向 4 种编码模式
│ │ ├── detect.rs # 定位图案检测 + 采样网格
+│ │ ├── perspective.rs # 透视矫正(旋转+仿射变换)
│ │ └── image.rs # 图像加载 + 二值化
│ ├── matrix/
│ │ ├── grid.rs # 模块矩阵 (含 reserved 保留区)
@@ -145,7 +146,7 @@ QRGen/
| Endpoint | 参数 | 返回 |
|----------|------|------|
| `GET /` | — | HTML 页面(内嵌 7 种编码模式) |
-| `GET /api/qr` | `text`, `level`(L/M/Q/H), `margin`(1-20), `size`(2-20), `fmt`(svg) | PNG 或 SVG |
+| `GET /api/qr` | `text`, `level`(L/M/Q/H), `margin`(1-20), `size`(2-20), `fmt`(png/bmp/jpeg/webp/svg) | PNG/BMP/JPEG/WebP/SVG |
| `POST /api/decode` | multipart `file` (PNG/JPEG/WebP) | JSON `{text, version, level, mask, errors_corrected}` |
## 前端状态管理
@@ -196,9 +197,9 @@ Action: SET_MODE | SET_FORM_DATA | SET_CONFIG | SET_PREVIEW | SET_LOADING
| 层级 | 数量 | 说明 |
|------|------|------|
-| 单元测试 | 72 | Galois 运算、RS 编解码、模式编解码、掩码评分、格式/版本信息 roundtrip、BCH 容错、蛇形提取等 |
+| 单元测试 | 81 | Galois 运算、RS 编解码、模式编解码、掩码评分、格式/版本信息 roundtrip、BCH 容错、蛇形提取、vCard 扩展等 |
| 集成测试 | 24 | 端到端编码、渲染输出验证、边距、特殊字符、自动版本选择、格式信息 roundtrip |
-| 总计 | 96 | `cargo test` 全部通过 |
+| 总计 | 105 | `cargo test` 全部通过 |
## 版本号升级清单
diff --git a/README.md b/README.md
index 4234844..07a4c1b 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
-
+
@@ -142,7 +142,7 @@ qrgen --decode qr.png
### GUI 桌面应用
-- **7 种编码模式**:文本 / URL / WiFi / vCard / Email / 电话 / SMS
+- **7 种编码模式**:文本 / URL / WiFi / vCard(10字段) / Email / 电话 / SMS
- **解码**:选择图片文件,解码 QR 码为文本
- **实时预览**:200ms 防抖,PNG 即时渲染
- **多格式导出**:PNG(可调模块大小)/ SVG / 复制到剪贴板
@@ -207,7 +207,7 @@ cargo run -p qrgen -- "Hello World"
cargo run -p qrgen-web # → http://localhost:3000
# Rust 测试
-cargo test --lib # 72 unit
+cargo test --lib # 81 unit
# 前端测试
cd gui/src-frontend && pnpm test # vitest
@@ -310,9 +310,10 @@ QRGen/
| QR 版本 | 1 ~ 40(21×21 ~ 177×177 模块) |
| 纠错级别 | L (7%) / M (15%) / Q (25%) / H (30%) |
| 编码模式 | 数字 / 字母数字 / 字节 / 汉字 (Shift JIS) |
-| 输出格式 | PNG / SVG / 终端 ASCII |
+| 输出格式 | PNG / BMP / JPEG / WebP / SVG / 终端 ASCII |
+| vCard 字段 | 姓名/电话/邮箱/公司/职位/地址/网址/生日/备注/照片 (10 字段) |
| 使用方式 | Library / CLI / GUI / Web API |
-| 解码 | 从图片识读 QR 码 → 文本(PNG/JPEG/WebP) |
+| 解码 | 从图片识读 QR 码 → 文本(支持旋转矫正) |
| 自动版本选择 | 根据数据长度 + 纠错级别 |
| Docker 镜像 | ~18MB (alpine) |
diff --git a/ROADMAP.md b/ROADMAP.md
index f1bfec5..d20ddc6 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -2,23 +2,17 @@
QRGen 的未来发展方向。
-## v0.2.0 (下一个版本)
+## v0.3.0 (下一个版本)
-- [ ] **CLI 编码模式** — CLI 支持 `--mode wifi` 等子命令,免去手动拼 `WIFI:T:...`
-- [ ] **Logo 嵌入** — QR 码中央嵌入自定义图片(Logo/头像)
-- [ ] **彩色 QR 码** — 自定义前景色/背景色,渐变色支持
-- [ ] **批量生成** — 从 CSV/JSON 批量生成 QR 码
-- [ ] **前端测试** — vite + vitest + React Testing Library,80% 覆盖率
- [ ] **E2E 测试** — Playwright 端到端测试(编码 → 导出 → 历史)
-- [ ] **i18n** — 中英双语界面 (i18next)
+- [ ] **解码增强 v2** — 完整透视变换(单应矩阵),模糊图像增强
+- [ ] **PWA 支持** — Web 端可安装为 PWA,离线使用
-## v0.3.0
+## v0.4.0 (未来)
-- [ ] **格式扩展** — 支持 BMP/JPEG/WEBP 输出
-- [ ] **解码增强** — 斜拍/旋转图像矫正、模糊图像增强
- [ ] **WiFi 扫码自动连接** — 移动端扫码后一键连接 WiFi
-- [ ] **vCard 扩展** — 支持更多字段(照片、社交媒体等)
- [ ] **macOS 桌面应用** — Tauri macOS 构建支持
+- [ ] **跨平台 GUI** — 完整的 Windows + macOS + Linux 桌面应用发布
## v1.0.0 (长期)
@@ -30,6 +24,21 @@ QRGen 的未来发展方向。
## 已交付
+### v0.3.0
+
+- ✅ 格式扩展(BMP/JPEG/WebP 输出 + `OutputFormat` 枚举)
+- ✅ 解码增强(旋转矫正 + 自动重试矫正流水线)
+- ✅ vCard 扩展(10 字段:TITLE/URL/BDAY/NOTE/PHOTO)
+
+### v0.2.0
+
+- ✅ 彩色 QR 码(前景色/背景色 + PNG Rgba + SVG + CLI `--fg`/`--bg`)
+- ✅ Logo 嵌入(PNG `imageops::overlay` + SVG base64)
+- ✅ CLI 编码模式(`--mode wifi/vcard/email/phone/sms`)
+- ✅ 批量生成(JSON/CSV 输入 → 自动编号输出)
+- ✅ i18n 中英双语(i18next + react-i18next)
+- ✅ 前端测试(19 tests,vitest + @vitest/coverage-v8)
+
### v0.1.0
- ✅ ISO/IEC 18004 完整 QR 码生成算法
@@ -40,7 +49,7 @@ QRGen 的未来发展方向。
- ✅ Web 服务(axum + Docker alpine 17.7MB 镜像 + `/api/decode`)
- ✅ QR 解码器(从零手写:定位→提取→RS纠错→模式解码,PNG/JPEG/WebP)
- ✅ RS 纠错解码(伴随式→Berlekamp-Massey→Chien→Forney)
-- ✅ 96 个 Rust 测试(72 单元 + 24 集成)
+- ✅ 105 个 Rust 测试(81 单元 + 24 集成)
- ✅ 前端工程化(Prettier + ESLint + vitest + husky + commitlint)
- ✅ crates.io 就绪(doc comments + 元数据 + 代码示例)
- ✅ 社区规范文件(CONTRIBUTING / CODE_OF_CONDUCT / SECURITY / ROADMAP / SUPPORT)