当前位置:
文章详情

NAS私有部署图片与PDF批量压缩转换服务

2025-10-29 14:45:35 0点赞 1收藏 0评论
NAS私有部署图片与PDF批量压缩转换服务

NAS私有|图片与PDF批量压缩转换服务:超轻量工作流 + Docker一键部署

这是一套面向 NAS/私有化部署场景的本地 Web 服务,用于批量处理 PDF/图片文件:解压上传、保留目录结构、按目标体积智能压缩、打包下载,并提供证件照换底色与尺寸调整等便捷工具。后端基于 Flask,前端用原生 Vue 3,镜像体积小、依赖清晰,适合局域网内协作与家庭使用。

核心优势

  • 私有化部署与本地运行:全流程在 NAS/本机内完成,数据不出网,保护隐私。

  • 处理速度非常快:轻量架构与任务并行,I/O 与压缩流程优化,数百张图片、几十页 PDF 通常在分钟级完成。

为什么需要它

  • 家庭与小团队常见需求:大量照片、文档需要按规则压缩、转格式,并保留原有目录结构。

  • NAS 场景下偏好本地化与隐私:不上传云端,不依赖外网即可完成批处理(隐私友好)。

  • 统一入口与批处理:一次上传,多格式支持、自动解压、批量输出,减少重复劳动。

  • 速度优先的工程实践:尽量减少不必要的重渲染与重复 I/O,充分利用并行任务与本地硬件性能。

功能一览

  • 多格式上传:支持 PDF/JPG/JPEG/PNG/ZIP/7Z/RAR。

  • 自动解压:ZIP/7Z/RAR 自动展开到任务工作区并扫描处理。

  • 输出格式:可选 jpg/jpeg/png/pdf。

  • 目标大小(KB):逐步降采样与压缩,尽量满足设定体积。

  • 保留目录结构:输出到 result/ 并同时打包为 result.zip。

  • 状态轮询:前端每 800ms 轮询,实时显示“排队/处理/完成/失败”阶段与当前文件名。

  • 证件照换底色:支持蓝/红/白,优先使用人像分割模型,避免误改面部或头发。

  • 证件照尺寸调整:常见一寸/两寸/护照等预设,支持自定义毫米尺寸、DPI与填充策略。

  • 纯前端交互优化:拖拽高亮、文件列表与大小徽章、移除文件、禁用态与 Spinner、Toast 提示、带时间戳日志。

  • 支持移动端访问:自适应布局与交互优化,手机浏览器直接使用。

架构与目录

pic_converter.py # 核心处理逻辑(PDF渲染、图片压缩、体积控制、目录结构保留) web_app.py # Flask Web 服务(上传、解压、处理、状态、下载、换底色、尺寸调整) static/ # 前端依赖(内置 Vue 全局构建以应对无外网场景) user/u_p.py # 登录用户配置(JSON结构) web_jobs/ # 任务工作区(每次上传一个作业目录,输出result与result.zip)

  • 后端:Flask + gunicorn

  • 前端:Vue 3(尽量不依赖外网;若本地静态文件缺失,会尝试国内 CDN 或注入占位)

  • 依赖:Pillow、PyMuPDF、rembg(可选)、onnxruntime(可选)、py7zr、rarfile

部署与运行

Docker(推荐)官方镜像:

registry.cn-hangzhou.aliyuncs.com/public-cc/dashu:pic_convertor

拉取镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/public-cc/dashu:pic_convertor

运行容器:

# Linux/macOS docker run --rm -p 5000:5000 -v $(pwd)/web_jobs:/app/web_jobs registry.cn-hangzhou.aliyuncs.com/public-cc/dashu:pic_convertor # Windows PowerShell docker run --rm -p 5000:5000 -v ${PWD}/web_jobs:/app/web_jobs registry.cn-hangzhou.aliyuncs.com/public-cc/dashu:pic_convertor

  • 访问地址:http://localhost:5000/

  • 数据卷:将容器内的 web_jobs 映射到宿主机,方便查看结果与排查状态。

  • 说明:镜像内含 p7zip-full 与 unar 以更好兼容 RAR5/中文文件名;默认使用 HTTP 与 gunicorn 监听 0.0.0.0:5000。

    • 完全本地化运行:无需外网即可完成上传、处理与下载,敏感文件不离开你的设备。

源码运行(本地)

安装依赖:

pip install -r requirements.txt # 或 pip install flask pillow pymupdf py7zr rarfile

启动服务:

python web_app.py

访问:http://127.0.0.1:5000/

自行构建镜像(可选)

docker build -t pic-converter:latest .

随后将运行命令中的镜像名替换为 pic-converter:latest。

使用指南

  1. 打开首页,左侧设置“目标大小(KB)”与“输出格式”。

  2. 拖拽或选择文件(支持多文件与压缩包)。

  3. 点击“上传并转换”,右侧日志显示排队与处理进度。

  4. 完成后出现下载链接,点击直接下载 result.zip。

证件照换底色:

  • 在页面下方选择底色,上传证件照,点击“更换底色”,完成后提供预览与下载链接。

证件照尺寸调整:

  • 选择预设或自定义毫米尺寸与 DPI,上传证件照,点击“调整尺寸”,完成后提供预览与下载链接。

API 简述(便于集成)

POST /upload

FormData:file(多个)、target_kb(数字)、output_format(jpg/jpeg/png/pdf)

返回:{"job_id": "...", "status_url": "/status/"} 或 {"error": "..."}

GET /status/

阶段:queued / processing{filename} / completed{pdf_count,img_count,out_count,download_url} / error{message}

GET /download/

直接下载 result.zip

POST /recolor

FormData:photo(单张)、bg_color(blue/red/white)

返回:{"job_id": "...", "preview_url": "/recolor/", "download_url": "/recolor/?download=1"}

POST /resize

FormData:photo、preset(如“一寸证件照”/“自定义”)、w_mm/h_mm(自定义时)、dpi、fit(cover/contain)、bg_color

常见问题与建议

  • RAR 解压失败:在宿主机预解压后再上传,或确认容器/系统已安装 unrar/7z 且路径可用。

  • 首次使用换底色较慢:分割模型首次加载耗时,后续调用会更快。

  • 本地网络不可达 CDN:项目内置 static/vue.global.prod.js,若未命中将尝试国内 CDN,再不行则注入占位,确保页面可预览。

  • 性能建议:优先在具备多核 CPU 与 SSD 的设备上运行;批量上传大文件时可分批次以获得更稳定的分钟级处理速度。

面向 NAS 的小技巧

  • 定时清理作业目录:历史任务位于 web_jobs/,可用 NAS 计划任务按时间规则清理。

  • 局域网用户管理:user/u_p.py 支持指定登录用户与密码;默认会生成一个 admin 用户与随机密码。

  • 反向代理与 HTTPS:容器默认 HTTP;如需 HTTPS,建议在 NAS 入口处(如 Nginx/Caddy)做统一 TLS 代理与鉴权。

路线图

  • 更细致的进度反馈(百分比/剩余时间估算)

  • 任务清理与配额限制

  • 更多质量参数(DPI、色彩空间)

  • 前端细节(主题切换、快捷键、无障碍优化)

结语

这是一套务实、轻量、易部署的“批量压缩与转换”工具,适合 NAS 与本地化场景。如果你正在为大量文档与图片的整理、归档、传输而苦恼,它能够把繁琐工作统一到一个简单的流程里,节省时间,也守住隐私。欢迎试用与二次开发。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

过一下

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
1
扫一下,分享更方便,购买更轻松