# 密转 SafeShift
**Repository Path**: she521lin/safe-shift
## Basic Information
- **Project Name**: 密转 SafeShift
- **Description**: 密转(SafeShift) 是一款桌面端离线多类型文件格式转换工具。
100% 本地运行、无文件大小限制、无需联网、不收集任何数据,真正做到隐私零泄露。
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-06-23
- **Last Updated**: 2026-07-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 格式转换工具, 万能格式转换, 离线转换, 文件转换, PDF-图片-文档-MD-Excel-识别
## README
#
SafeShift 密转
> **本地转换,隐私无忧** — 一款功能丰富的桌面端离线万能格式转换工具




---
## ✨ 为什么选择 SafeShift
- **🔒 完全离线** — 所有文件转换均在本地完成,绝不上传,隐私零泄露
- **📦 一站式转换** — 支持图片、视频、文档、数据表格、OCR 识别等 29 种格式转换
- **🖱️ 便捷操作** — 支持文件拖放,界面简洁直观
- **🎨 现代界面** — 基于 CustomTkinter,支持明暗主题切换
- **⚡ 实时反馈** — 转换进度实时显示,支持取消操作
- **💾 智能命名** — 自动避免文件覆盖,支持自定义输出目录
---
## 🚀 快速开始
### 系统要求
| 项目 | 要求 |
|------|------|
| 操作系统 | Windows 10/11 (x64) |
| Python 版本 | 3.12 |
| 内存 | 建议 4GB 以上 |
### 运行方式
**方式一:源码运行(推荐开发调试)**
```bash
# 克隆仓库
git clone https://gitee.com/she521lin/safe-shift.git
cd safe-shift
# 创建虚拟环境(推荐)
conda create -n safeshift python=3.12
conda activate safeshift
# 安装依赖
pip install -r requirements.txt
# 运行
python main.py
```
**方式二:双击启动(推荐日常使用)**
```bash
# 双击 start.bat 自动激活环境并启动
start.bat
```
**方式三:打包运行**
```bash
# 安装打包工具
pip install pyinstaller
# 执行打包脚本
python build.py
# 运行生成的可执行文件
dist/SafeShift.exe
```
---
## 📖 使用教程
### 基本操作
1. **选择转换类型** — 在主界面点击对应分类的转换卡片
2. **添加文件** — 拖放文件到指定区域,或点击选择文件
3. **配置参数**(可选) — 展开参数面板设置转换选项
4. **开始转换** — 点击"开始转换"按钮
5. **查看结果** — 转换完成后可预览、打开文件夹或复制路径
### 界面预览
---
## 🧩 支持的转换类型
### 图片转换
| 功能 | 输入格式 | 输出格式 |
|------|----------|----------|
| 图片→WebP | PNG, JPG, BMP, GIF, TIFF | WebP |
| 图片→ICO | 任意图片 | ICO (多尺寸) |
| 格式互转 | PNG, JPG, BMP, GIF, WebP, TIFF, AVIF | 互转 |
| SVG→PNG | SVG | PNG |
### 视频音频
| 功能 | 输入格式 | 输出格式 |
|------|----------|----------|
| 视频→GIF | MP4, MOV, AVI, MKV, WMV, FLV | GIF |
| 视频提取音频 | 视频文件 | MP3, WAV |
| 音频格式互转 | MP3, WAV, FLAC, AAC, OGG | 互转 |
### 文档转换
| 功能 | 输入格式 | 输出格式 |
|------|----------|----------|
| Word→PDF | DOCX | PDF |
| PPT→PDF | PPTX | PDF |
| Excel→PDF | XLSX, XLS | PDF |
| Markdown→PDF | MD | PDF |
| PDF→Word (OCR) | PDF | DOCX |
| Word→图片 | DOCX | PNG, JPG |
| PPT→图片 | PPTX | PNG, JPG |
| HTML→PDF | HTML | PDF |
| 图片合并→PDF | 图片文件 | PDF |
| Word→Markdown | DOCX | MD |
| Markdown→Word | MD | DOCX |
### 数据表格
| 功能 | 输入格式 | 输出格式 |
|------|----------|----------|
| JSON→CSV | JSON | CSV |
| CSV→Excel | CSV | XLSX |
| Excel→CSV | XLSX, XLS | CSV |
| 图片表格转Excel | 含表格的图片 | XLSX |
| 图片文字识别 (OCR) | 图片 | TXT, DOCX, JSON |
| 票据转Excel | 发票、火车票、行程单等财务票据图片 | XLSX |
### 实用工具
| 功能 | 输入格式 | 输出格式 |
|------|----------|----------|
| PDF 合并 | 多个 PDF | 单个 PDF |
| PDF 拆分 | PDF | 多个 PDF |
| 图片↔Base64 | 图片/TXT | TXT/图片 |
| 字幕互转 | SRT, ASS, VTT | 互转 |
| 电子书互转 | EPUB, MOBI | EPUB, MOBI, PDF, TXT |
---
## 🔍 OCR 功能
SafeShift 集成 **RapidOCR** + **OpenCV** 引擎,支持多种语言识别。
| 语言 | 代码 | 说明 |
|------|------|------|
| 中文(简) | `ch` | 简体中文识别(默认) |
| 中文(繁) | `chinese_cht` | 繁体中文识别 |
| 英文 | `en` | 英文识别 |
| 日文 | `japan` | 日文识别 |
| 韩文 | `korean` | 韩文识别 |
| 泰文 | `ta` | 泰文识别 |
| 多语种混合 | `multi` | 多语种混合识别 |
> 语言在转换页面的参数设置中手动选择,不在全局设置中预设。
**输出格式**:
- **TXT** — 纯文本,按位置排序
- **DOCX** — Word 文档,保持段落结构
- **JSON** — 包含位置信息的结构化数据(适合发票识别等场景)
**图像预处理**:开启后使用 OpenCV 对图片做去噪、增强对比度、倾斜矫正等处理,可显著提升低质量图片的识别率("票据转Excel"功能默认开启)。
---
## ⚙️ 配置说明
### 配置文件
配置文件位于 `config/config.json`,主要配置项:
```json
{
"theme": "System", // System / Light / Dark
"output_dir": "", // 默认输出目录(为空时使用系统文档/SafeShift)
"window_width": 1100,
"window_height": 750,
"last_conversion_type": null, // 上次使用的转换类型
"image_preprocessing": false, // 图像预处理开关(OpenCV,提升 OCR 识别率)
"log_level": "INFO", // 日志级别:DEBUG / INFO / WARNING / ERROR
"gpu_acceleration": false, // GPU 加速开关
"overwrite_confirm": true // 输出文件已存在时是否弹出确认
}
```
> **关于"最近使用"和"我的收藏"**:这两类数据保存在独立的 JSON 文件中(`data/recent_used.json`、`data/favorites.json`),用于首页的快速入口。
### 高级设置
在设置页面 → 高级设置中可调整:
- **图像预处理** — 使用 OpenCV 对图片做去噪 / 增强对比度 / 矫正等处理,提高 OCR 识别准确率
- **日志级别** — 控制日志输出详细程度
- **GPU 加速** — 启用后 OCR 与 YOLO 模型使用 GPU 推理
- **文件覆盖确认** — 输出文件已存在时是否提示
> 转换参数页中可手动选择 OCR 识别语言(中文、英文、日文、韩文、繁体中文等),无需在设置中预先配置。
---
## 📦 依赖组件
### 可选组件(按需安装)
以下组件需要在设置页面手动下载安装,用于特定转换功能:
| 组件 | 用途 | 许可证 | 必需场景 |
|------|------|--------|----------|
| FFmpeg | 视频/音频编解码 | LGPL v2.1+ | 视频转 GIF、音频提取 |
| LibreOffice | Office 文档转 PDF | MPLv2 | Word/PPT/Excel → PDF |
| Calibre | 电子书转换 | GPLv3 | EPUB/MOBI 互转 |
| Microsoft Edge | HTML / Markdown → PDF 渲染 | 内置 | HTML→PDF、Markdown→PDF |
| Playwright Chromium | HTML / Markdown → PDF 渲染(Edge 不可用时回退) | Apache 2.0 | HTML→PDF、Markdown→PDF |
**安装方式**:打开设置页面 → 组件管理 → 点击对应组件的"安装"按钮
### 手动安装(可选)
- **CUDA Toolkit** — 用于 GPU 加速
- **cuDNN** — GPU 加速依赖
---
## 🏗️ 项目结构
```
safe-shift/
├── core/ # 核心模块
│ ├── strategies/ # 转换策略实现
│ │ ├── image_strategies.py # 图片转换策略
│ │ ├── video_audio_strategies.py # 视频音频策略
│ │ ├── document_strategies.py # 文档转换策略
│ │ ├── document_strategies_part2.py # 文档策略(续)
│ │ ├── data_strategies.py # 数据表格策略
│ │ └── utility_strategies.py # 实用工具策略
│ ├── component_installer.py # 组件安装器
│ ├── component_manager.py # 组件管理器
│ ├── config.py # 配置管理
│ ├── converter_context.py # 转换上下文
│ ├── data_manager.py # 数据持久化(历史、收藏、最近使用)
│ ├── factory.py # 策略工厂
│ ├── strategy.py # 策略接口
│ └── conversion_type.py # 转换类型枚举
├── ui/ # 用户界面
│ ├── main_window.py # 主窗口
│ ├── home_page.py # 主页(功能卡片)
│ ├── converter_page.py # 转换页
│ ├── history_page.py # 历史记录页
│ ├── settings_page.py # 设置页(页面形式,非弹窗)
│ ├── settings_dialog.py # 设置对话框(兼容旧版)
│ ├── about_page.py # 关于页
│ ├── batch_page.py # 批量任务页
│ ├── theme.py # 主题配置(避免循环导入)
│ ├── drop_target.py # 拖放目标区
│ ├── feature_card.py # 功能卡片
│ └── collapsible_panel.py # 可折叠面板
├── utils/ # 工具模块
│ ├── logger.py # 日志记录
│ ├── ocr_engine.py # OCR 引擎
│ ├── ocr_helper.py # OCR 辅助工具
│ ├── image_preprocessor.py # OpenCV 图像预处理
│ ├── finance_classifier.py # 财务票据分类(YOLO)
│ ├── finance_extractor.py # 财务票据字段抽取
│ ├── yolo_engine.py # YOLO 模型推理
│ ├── cv2_patch.py # OpenCV 兼容补丁
│ ├── template_manager.py # 模板管理
│ ├── pdf_utils.py # PDF 工具函数
│ ├── subprocess_helper.py # 子进程辅助
│ ├── paths.py # 路径处理
│ └── window_utils.py # 窗口工具函数
├── data/ # 本地数据
│ ├── models/ # OCR / YOLO 模型
│ ├── history.json # 历史记录
│ ├── favorites.json # 收藏列表
│ └── usage.json # 使用统计
├── licenses/ # 第三方许可证
├── logo/ # 应用图标
├── main.py # 入口文件
├── build.py # 打包脚本
├── requirements.txt # 依赖列表
└── start.bat # Windows 启动脚本
```
---
## 🛠️ 开发指南
### 开发环境搭建
```bash
# 克隆仓库
git clone https://gitee.com/she521lin/safe-shift.git
cd safe-shift
# 创建 conda 环境
conda create -n safeshift python=3.12
conda activate safeshift
# 安装依赖
pip install -r requirements.txt
# 运行
python main.py
```
### 代码规范
- 遵循 PEP 8 代码规范
- 使用 type hints 进行类型注解
- 使用 `logger` 替代 `print` 进行日志记录
- 新增转换策略需继承 `ConversionStrategy` 并注册到 `StrategyFactory`
### 打包发布
```bash
# Windows 打包
python build.py
# 输出目录
dist/SafeShift.exe
```
---
## 🐛 常见问题
### Q: 安装依赖失败?
A: 建议使用 Conda 创建虚拟环境,Python 版本选择 3.12。
### Q: OCR 功能不可用?
A: RapidOCR 模型已内置,安装后即可使用。
### Q: GPU 加速未启用?
A: 需要安装 CUDA Toolkit 和 cuDNN。如果未安装,会自动切换到 CPU 模式。
### Q: 转换失败?
A: 请查看 `config/safeshift.log` 日志文件获取详细错误信息。
### Q: 如何卸载?
A: 删除项目文件夹即可,SafeShift 不写入系统注册表。
---
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
### 贡献流程
1. Fork 仓库
2. 创建特性分支 (`git checkout -b feature/xxx`)
3. 提交代码 (`git commit -m "feat: xxx"`)
4. 推送到远程 (`git push origin feature/xxx`)
5. 创建 Pull Request
### 提交规范
- `feat:` 新增功能
- `fix:` 修复 Bug
- `docs:` 文档更新
- `refactor:` 代码重构
- `style:` 代码格式
- `test:` 测试更新
### 开发计划 (Roadmap)
- [ ] 支持 MacOS 平台
- [ ] 批量转换优化(多线程)
- [ ] 内置截图功能
- [ ] 音频转文字(Whisper 模型)
- [ ] 功能优化
- [ ] 功能拓展
---
## 📄 许可证
[MIT License](LICENSE)
---
## 🔒 隐私声明
**SafeShift 承诺**:
- 所有文件转换均在本地完成
- 不收集任何用户数据
- 不发送任何网络请求
- 代码完全开源,可自行审计
---
**SafeShift - 让格式转换更简单** ✨
## ⭐ Star History
🌐 **项目地址**: [https://gitee.com/she521lin/safe-shift](https://gitee.com/she521lin/safe-shift)