PicEx 是一个强大的文档图片提取工具,可以从各种文档格式中自动提取图片。支持轮询扫描模式,特别适合在 NAS 等环境中运行。
✨ 功能特点
-
支持多种文档格式:
- PDF 文件 (.pdf)
- Word 文档 (.doc, .docx)
- Excel 表格 (.xls, .xlsx)
- PowerPoint 演示文稿 (.ppt, .pptx)
- ZIP 压缩包 (.zip)
- Adobe Illustrator 文件 (.ai) - 使用 PDF 兼容层
- Adobe Photoshop 文件 (.psd) - 使用 ImageMagick 提取图层
-
智能文件处理:
- 🔄 轮询模式 - 定时扫描目录(默认 30 秒),不依赖文件系统事件
- 📁 支持子文件夹处理
- 🔒 文件锁定检测,避免处理正在写入的文件
- ⏭️ 智能去重,不重复处理未修改的文件
- 📂 自动创建输出目录结构
-
容器化部署:
- 🐳 Docker 支持
- 📦 Docker Compose 一键部署
- 🚀 绿联云等 NAS 设备完美支持
📦 系统要求
- Docker 或 Docker Compose
- 至少 1GB 可用内存
- 至少 1GB 可用磁盘空间
🚀 快速开始
使用 Docker 镜像(推荐)
阿里云镜像(国内推荐):
docker pull registry.cn-hangzhou.aliyuncs.com/zjsck/picex:latest
使用 docker-compose:
# 创建目录 mkdir -p input output # 启动服务(轮询模式,每 30 秒扫描一次) docker-compose up -d # 查看日志 docker-compose logs -f
直接运行:
# 轮询模式(推荐):每 30 秒扫描一次目录 docker run -d \ --name picex \ --user root \ -v $(pwd)/input:/input \ -v $(pwd)/output:/output \ registry.cn-hangzhou.aliyuncs.com/zjsck/picex:latest /input /output 30 # 查看日志 docker logs -f picex
自定义轮询间隔
修改 docker-compose.yml 中的 command 参数:
command: ["/input", "/output", "60"] # 改为 60 秒
或在命令行中指定:
docker run ... picex /input /output 60 # 60 秒轮询间隔从源码构建
# 克隆仓库 git clone https://github.com/zhangjunL/PicEx.git cd PicEx # 构建镜像 ./build.sh # 或使用 docker-compose docker-compose build
📖 使用说明
工作模式
PicEx 使用轮询扫描模式:
- 🔄 定时扫描输入目录(默认 30 秒)
- 🔍 检测新文件或修改的文件
- 📄 根据文件类型提取图片
- 💾 保存到输出目录,保持原有目录结构
支持的格式
| 格式 | 扩展名 | 提取方式 |
|---|---|---|
.pdf |
逐页提取嵌入图片 | |
| Word | .docx, .doc |
提取嵌入媒体资源 |
| Excel | .xlsx, .xls |
提取嵌入图片 |
| PowerPoint | .pptx, .ppt |
提取嵌入媒体 |
| ZIP | .zip |
递归提取压缩包图片 |
| Adobe Illustrator | .ai |
PDF 兼容层提取 |
| Adobe Photoshop | .psd |
图层提取(ImageMagick) |
输出结构
output/
├── document.pdf/
│ ├── image_page1_1.png
│ ├── image_page2_1.png
│ └── ...
├── design.psd/
│ ├── layer_1.png
│ ├── layer_2.png
│ └── ...
└── logo.ai/
└── image_page1_1.png
🛠️ 技术栈
- .NET 8.0 - 主开发框架
- iText7 - PDF 处理
- DocumentFormat.OpenXml - Office 文档处理
- ImageMagick - PSD 图层提取
- Docker - 容器化部署
📁 项目结构
PicEx/
├── PicEx.Console/ # 主程序
│ ├── Extractors/ # 图片提取器
│ │ ├── PdfImageExtractor.cs
│ │ ├── ExcelImageExtractor.cs
│ │ ├── ArchiveImageExtractor.cs
│ │ ├── AiImageExtractor.cs
│ │ └── PsdImageExtractor.cs
│ ├── Services/ # 服务
│ │ └── FileWatcherService.cs
│ ├── Utils/ # 工具类
│ │ └── PathUtils.cs
│ └── Program.cs # 入口程序
├── Dockerfile # Docker 配置
├── docker-compose.yml # Docker Compose 配置
├── build.sh # 构建脚本
├── push-aliyun.sh # 阿里云推送脚本
└── README.md
🔧 配置说明
docker-compose.yml
services: picex: image: registry.cn-hangzhou.aliyuncs.com/zjsck/picex:latest container_name: picex restart: unless-stopped user: root # NAS 环境需要 root 权限 volumes: - ./input:/input - ./output:/output command: ["/input", "/output", "30"] # 30 秒轮询间隔
环境变量
DOTNET_CLI_TELEMETRY_OPTOUT=true- 禁用 .NET 遥测
💡 使用场景
绿联云 NAS 部署
- 通过绿联云 Docker 管理界面部署
- 挂载
input和output目录 - 设置自动重启
- 复制文件到
input目录即可自动处理
批量处理文档
# 复制所有 PDF 到 input 目录 cp ~/Documents/*.pdf ./input/ # 等待最多 30 秒(轮询间隔) sleep 30 # 查看输出 ls -R ./output/
定时任务
配合 cron 或 NAS 定时任务,定期运行容器处理文件:
# 每天凌晨 2 点运行 0 2 * * * cd /path/to/PicEx && docker-compose up -d && sleep 3600 && docker-compose down
⚠️ 注意事项
-
文件权限:确保 Docker 容器有读写权限
- NAS 环境建议使用
user: root - 或设置 output 目录权限为 777
- NAS 环境建议使用
-
轮询间隔:根据需求调整
- 10-30 秒:快速响应,稍占资源
- 60-300 秒:低资源占用
-
PSD 文件:
- 复杂的 PSD 可能处理时间较长
- 大型 PSD 建议增加容器内存限制
-
AI 文件:
- 需要包含 PDF 兼容层
- 在 Illustrator 保存时启用 "Create PDF Compatible File"
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📄 许可证
MIT License