图片元数据打包工具

纯本地处理的在线图片元数据批量打包工具,支持选择文件夹递归上传, 一次性提取图片的 EXIF / IPTC / XMP / ICC Profile 全部元数据, 自动检测 GPS 定位、设备序列号、个人信息、软件签名、内嵌缩略图 5 类隐私敏感字段, 给出风险等级(高 / 中 / 低)与逐项清理建议。 支持 JSON / JSON Lines (NDJSON) / Markdown / CSV / ZIP 五种格式报告导出: JSON 便于程序解析、JSON Lines 每行一个图片报告便于日志聚合与大数据管道流式消费、 Markdown 便于人类阅读、CSV 便于表格分析、 ZIP 完整包含每图独立 JSON + manifest.json + README.txt + summary.md + summary.csv + summary.jsonl, 纯浏览器原生 API 打包零依赖。 支持批量上传、文件夹递归扫描、处理进度实时显示、风险等级筛选、单图折叠详情查看, 提供暗色模式移动端响应式。 基于 exifr 库全本地解析,零上传、零追踪、可离线使用, 适用于照片分享前隐私检查、批量图片元数据审计、合规归档、CI/CD 元数据回归测试等场景。

点击选择图片或拖拽到此区域
支持 JPEG / PNG / WebP / TIFF / HEIC / GIF / AVIF / BMP,单文件最大 100.00 MB

尚未选择图片文件

选择一批图片后,本工具会自动批量提取 EXIF / IPTC / XMP / ICC 元数据, 并进行隐私风险分析(GPS 定位、设备序列号、个人信息等敏感字段), 支持 JSON / Markdown / CSV / ZIP 多格式报告导出。

常见问题

支持哪些图片格式?能解析哪些元数据?

本工具支持以下 8 种图片格式: JPEG / PNG / WebP / TIFF / HEIC / HEIF / GIF / AVIF / BMP, 单文件最大 100MB。 解析的元数据维度包括:
- EXIF:相机制造商、型号、镜头、拍摄参数(光圈、快门、ISO、焦距)、GPS 定位、拍摄时间、方向、分辨率、色彩空间、软件签名、MakerNote 等
- IPTC:作者、版权、标题、描述、关键词、地点、新闻稿元数据等
- XMP:基于 RDF/XML 的扩展元数据(Adobe 系列软件常用)
- ICC Profile:色彩配置文件信息(名称与字节数)
- 文件基础信息:文件大小、MIME 类型、最后修改时间、图片宽高、格式、色彩空间、方向

解析基于 exifr 库,全部在浏览器本地完成,无任何网络请求。

隐私风险分析能检测哪些敏感字段?风险等级如何划分?

本工具自动检测 5 类隐私敏感字段,并按严重程度划分风险等级:
- GPS 定位(高风险):GPSLatitude / GPSLongitude / GPSAltitude / GPSImgDirection 等 GPS 相关字段,可精确定位拍摄位置,分享前务必清理
- 设备序列号(中风险):BodySerialNumber / LensSerialNumber / CameraSerialNumber / InternalSerialNumber,可用于设备溯源
- 个人信息(中风险):Artist / Copyright / Author / OwnerName / Credit / Contact / By-line / CaptionWriter 等作者版权与联系方式字段
- 软件签名(低风险):Software / MakerNote / ProcessingSoftware / HostComputer / Publisher,可能含相机内部数据或编辑历史
- 内嵌缩略图(低风险):Thumbnail / ThumbnailImage / IFD1 / PreviewImage,JPEG 内嵌缩略图可能含原图压缩版

综合风险等级取最高严重程度:含 GPS 字段为高风险,含序列号或个人信息为中风险,仅含软件签名或缩略图为低风险,无任何敏感字段为低风险。每个隐私发现都附有清理建议,可参考使用 EXIF 编辑器工具进行清理。

五种导出格式分别适合什么场景?

本工具提供 JSON / JSON Lines / Markdown / CSV / ZIP 五种格式报告:
- JSON:结构化数据,包含完整 BundleSummary(含每图完整报告 + 隐私分析 + 统计汇总),便于程序解析、CI/CD 集成、数据库存储
- JSON Lines (NDJSON):每行一个独立 JSON 对象(一个图片报告),无统计汇总,便于日志聚合系统(ELK / Loki / Fluentd)按行采集与索引、大数据管道(Kafka / Spark Streaming)逐行消费、增量处理(可只读取前 N 行而无需解析整个 JSON 文档)、命令行管道(cat reports.jsonl | jq -c 'select(.privacy.riskLevel=="high")'
- Markdown:人类可读的报告,含概览统计表格、各图详情、隐私发现清单、EXIF 关键字段(前 20 项),适合文档归档、团队分享、报告粘贴
- CSV:表格格式,一行一图,含 16 列(序号、文件名、大小、MIME、修改时间、宽高、格式、色彩空间、风险等级、5 类隐私命中、解析错误),适合 Excel 分析、批量筛选、统计对比
- ZIP 完整包:归档所有内容,包含每图独立 JSON(含完整元数据)+ manifest.json(汇总)+ README.txt(用户友好说明)+ summary.md(Markdown 报告)+ summary.csv(CSV 报告)+ summary.jsonl(NDJSON 报告),适合一次性归档、长期保存、跨工具协作

ZIP 采用 STORE 模式打包(无压缩),原因:JSON / Markdown / CSV / JSON Lines 均为文本文件,ZIP 内主要是结构化数据,DEFLATE 压缩收益微小(<5%),STORE 实现简单且打包速度快。ZIP 文件名格式为 metadata-bundle-YYYYMMDD.zip,JSON Lines 文件名格式为 metadata-bundle-YYYYMMDD.jsonl

能否批量上传整个文件夹?递归处理子目录吗?

支持批量上传整个文件夹。点击上传区的「🗂️ 选择整个文件夹(递归上传)」按钮,在弹出的文件夹选择对话框中选定一个目录,浏览器会递归收集该目录及所有子目录下的全部文件,本工具会自动过滤出支持的图片文件(JPEG / PNG / WebP / TIFF / HEIC / HEIF / GIF / AVIF / BMP),非图片文件会被跳过并在上传区下方显示「已从所选文件夹跳过 N 个非图片文件」提示。

实现基于浏览器原生的 webkitdirectory 属性(Chrome / Edge / Firefox / Safari 均支持),无需插件或额外权限。典型用途:
- 批量扫描相册文件夹(如手机导出的 DCIM 目录)进行隐私审计
- 批量处理设计稿文件夹(含子项目子目录)的元数据归档
- CI/CD 流水线中对构建产物目录做元数据回归测试

单文件大小上限仍为 100MB,超过上限的文件会被跳过。如文件夹内图片数量很多(如 100+ 张),建议分批处理(每批 30-50 张),避免长时间占用浏览器。

JSON Lines (NDJSON) 格式与普通 JSON 有何差异?何时选用?

JSON Lines(又称 NDJSON,Newline Delimited JSON)是每行一个独立 JSON 对象的文本格式,符合 NDJSON 规范,与普通 JSON 的核心差异:
- 结构:普通 JSON 是单个文档(本工具输出含统计汇总 + reports 数组的 BundleSummary);JSON Lines 每行一个图片报告,无统计汇总
- 解析方式:普通 JSON 需一次性读入内存解析整个文档;JSON Lines 可逐行流式解析,内存占用恒定
- 追加写入:普通 JSON 不支持追加(需重写整个文档);JSON Lines 可直接在文件末尾追加新行
- 容错性:普通 JSON 任一语法错误会导致整个文档解析失败;JSON Lines 单行错误只影响该行,其他行可正常解析

何时选用 JSON Lines
- 日志聚合系统(ELK / Loki / Fluentd)按行采集与索引,每行作为一个独立事件
- 大数据管道(Kafka / Spark Streaming / Flink)逐行消费,无需等待完整文档
- 增量处理:可只读取前 N 行而无需解析整个 JSON 文档
- 命令行管道:cat metadata-bundle-20260720.jsonl | jq -c 'select(.privacy.riskLevel=="high")' 筛选高风险图片
- 长期归档:可追加新数据而不重写整个文件,便于增量归档

本工具输出的 JSON Lines 文件每行严格一个 ImageMetadataReport 对象(含文件名、文件大小、MIME、修改时间、图片信息、EXIF / IPTC / XMP / ICC 原始数据、隐私分析结果、解析错误、解析耗时),行尾 \n,字符串内嵌的换行符会被 JSON.stringify 转义为 \n 不会破坏行结构,文件扩展名为 .jsonl,MIME 类型为 application/x-ndjson

与 EXIF 信息查看器、EXIF 元数据编辑器有何差异?

三个工具互补,各有侧重:
- EXIF 信息查看器:单图只读查看,提供分类视图(图片属性 / 相机信息 / 拍摄参数 / GPS / 时间 / 软件版权)与 JSON 原始数据视图,适合快速浏览单张图片的详细 EXIF 信息
- EXIF 元数据编辑器:单图 JPEG 编辑,支持删除 GPS / 相机信息 / 拍摄参数 / 软件信息 / MakerNote / 缩略图 / 修改拍摄时间等 7 种编辑操作,自实现 JPEG 二进制结构操作,适合照片分享前清理敏感字段
- 图片元数据打包工具(本工具):批量处理 + 隐私分析 + 报告导出,支持一次上传多张图片自动批量提取 EXIF / IPTC / XMP / ICC 元数据,自动检测 5 类隐私敏感字段并给出风险等级,提供 JSON / Markdown / CSV / ZIP 四种格式报告导出,适合批量元数据审计、合规归档、CI/CD 回归测试

典型工作流:先用本工具批量扫描所有图片识别风险,再用EXIF 编辑器针对性清理高风险图片,最后用EXIF 查看器验证清理结果。

批量处理速度如何?是否会卡死浏览器?

本工具采用顺序处理而非并行,原因:①exifr 解析大图较占内存,并行可能触发浏览器内存限制;②顺序处理便于进度回调与取消控制;③单图解析通常 < 200ms,批量 50 张约 10 秒可接受。

为避免卡死浏览器,本工具做了以下优化:
- 单文件大小上限 100MB,超过拒绝处理
- 跳过 IFD1(缩略图 IFD)解析,避免不必要的内存占用
- 跳过 Photoshop / JFIF / userCamera 等非核心段
- 处理进度实时显示(当前序号 / 总数 + 文件名 + 进度条)
- exifr 动态导入,避免 SSR 阶段加载
- 解析失败不抛出,记录 parseError 后继续下一张,保证批量处理不中断

如果您的图片很多(如 100+ 张),建议分批处理(每批 30-50 张),避免长时间占用浏览器。

ZIP 打包是纯本地实现吗?会泄露图片数据吗?

完全本地处理,零上传零追踪

- 解析阶段:基于 exifr 库在浏览器本地解析图片二进制数据,无任何网络请求
- 分析阶段:隐私字段检测、风险等级计算、统计汇总全部在浏览器内存中完成
- 打包阶段:ZIP 采用纯浏览器原生 API实现(CRC32 查找表 + Uint8Array + DataView + Blob + TextEncoder),无第三方 ZIP 库依赖
- 下载阶段:使用 URL.createObjectURL + 隐藏 <a> 标签触发浏览器原生下载,2 秒后释放 ObjectURL

ZIP 实现细节:
- 压缩方法:STORE(无压缩),原因:JSON / Markdown / CSV 均为文本,DEFLATE 压缩收益微小,STORE 实现简单且打包速度快
- 文件名编码:UTF-8(通用标志位 11 置位),支持中文文件名
- 文件名安全:替换 \ / : * ? " < > | 及控制字符为下划线,长度限制 60 字符,跨平台兼容
- CRC32 校验:使用 IEEE 802.3 多项式 0xedb88320 标准算法,确保解压软件可正确识别

处理失败如何排查?常见错误有哪些?

处理失败的图片会在报告列表中显示"解析失败"红色徽章,并在展开详情中显示具体错误信息。常见错误:
- exifr 加载失败:浏览器网络异常或 CDN 不可用,刷新页面重试
- 解析失败:No Exif segment found:图片本身不含 EXIF 段(如 PNG 截图、GIF 动图),属正常情况,不会影响其他图片处理
- 解析失败:Invalid JPEG:文件损坏或扩展名与实际格式不符(如把 PNG 重命名为 .jpg)
- 解析失败:Unsupported format:exifr 7.x 暂不支持的格式(如某些 HEIC 变体)
- 文件大小超过上限:单文件 > 100MB,建议压缩后再处理

失败的图片仍会出现在报告中(带 parseError 字段),但不会影响其他图片的处理与统计。CSV 报告的"解析错误"列会记录具体错误,便于排查。

能否用于商业用途?是否需要署名?

本工具基于 exifr 库(MIT 许可证)开发,工具本身遵循项目 LICENSE。 生成的报告内容归用户所有,可自由用于商业场景(包括但不限于:合规审计、CI/CD 集成、内部归档、客户交付)。

报告中的 README.txt 会标注生成工具与站点链接,便于追溯,但用户可自行删除。 建议在合规场景保留追溯信息,便于审计验证。