工具定位
这是一个“图片元数据治理”在线工具:上传单张或批量图片后,自动解析 EXIF/IPTC/XMP/ICC 等信息,给出隐私风险提示,并支持一键清理/保留策略导出、生成处理报告与可复现的命令行脚本。
适用场景
电商/自媒体素材上架前的隐私合规自检;公司对外发布图片前的定位信息清理;设计稿或摄影交付前的 ICC/色彩配置核对;历史素材库批量巡检并生成审计报告。
交付物要求
AI 必须输出:完整可运行项目代码、清晰文件结构、安装与运行命令、Docker 部署说明、接口/页面说明、以及测试用例或 QA checklist(覆盖正确性、边界与安全)。
Prompt(直接复制给 AI 生成完整在线工具)
你是一名资深全栈工程师。请生成一个可部署的在线工具项目:图片 EXIF/ICC 元数据检查与批量清理工作台。
【核心目标】
- 用户上传单张/多张图片(JPG/JPEG/PNG/WebP/HEIC 可选)后:
1) 解析并展示 EXIF/IPTC/XMP/ICC 等元数据;
2) 标记隐私/合规风险(GPS、设备序列号、作者信息、时间线等);
3) 支持“清理策略”与“保留策略”两种模式:
- 清理策略:移除所有可选元数据(保留像素内容),并允许只保留必要字段(例如保留 EXIF Orientation 或保留 ICC);
- 保留策略:仅移除高风险字段(GPS 等),其他字段保留;
4) 生成批量处理结果:可下载清理后的 zip;
5) 生成报告:JSON + HTML 两种格式(含原始字段、处理前后对比、风险分级、统计汇总)。
【硬性限制】
- 这是“处理/转换/预览/抽取现有信息”的工具,禁止任何“生成图片/出图/配图/渲染图/海报/插画”相关功能或文案。
- 工具必须离线可运行(本地或服务器),不得依赖第三方商业 API;可使用开源库。
【技术栈建议】
- 前端:React + Vite + Type + Tailwind(或等价方案);
- 后端:Node.js (Express/Fastify);
- 解析与清理:优先使用 exiftool(通过子进程调用)或纯 JS 库(exifr 等)+ sharp;
- 文件处理:multer/stream,限制单文件大小、总上传数量;
- 打包:生成 Dockerfile + docker-compose.yml。
【安全与质量要求】
- 上传文件做白名单校验(mime+扩展名+magic number);
- 限流与并发控制(避免一次上传拖垮服务器);
- 临时文件生命周期管理(自动清理);
- 明确错误信息与可观测性(结构化日志);
- 提供单元测试与最小端到端测试(或 QA checklist)。
【页面与交互】
- 上传区:拖拽/多选;
- 列表区:每张图片显示缩略图、风险等级、关键字段摘要;
- 详情弹窗:字段分组(EXIF/IPTC/XMP/ICC),可搜索字段;
- 处理选项:
- 模式:清理策略 / 保留策略
- 选项:保留 ICC、保留 Orientation、移除 GPS、移除作者信息、移除时间戳等
- 结果区:下载 zip、下载报告(JSON/HTML)、显示统计(清理了多少字段、多少张含 GPS 等)。
【必须输出的内容格式】
1) 项目概览(1-2 段)
2) 功能清单
3) 文件树(tree 形式)
4) 关键实现说明(解析、清理、打包、报告生成、性能优化点)
5) 完整代码(按文件逐个给出)
6) 本地运行命令
7) Docker 部署命令
8) 测试用例或 QA checklist(可直接照做)
请确保项目可直接复制到空目录后运行成功,并在文末给出“常见问题排查(FAQ)”。
验收要点
上传后能准确展示字段;清理前后对比可验证(例如清理后不再含 GPS);批量下载与报告可用;处理过程有进度与错误提示;Docker 一键启动;QA 清单覆盖:大文件、无 EXIF、仅 ICC、WebP、异常文件、并发上传等。