nord342/photo-metadata-stripper

GitHub: nord342/photo-metadata-stripper

一款本地照片元数据清理工具,批量移除隐藏信息以保护隐私。

Stars: 0 | Forks: 0

# photo-metadata-stripper 在将照片分享到网上之前,移除 EXIF 数据、GPS 坐标、相机信息以及所有隐藏元数据 —— **100% 本地处理,不上传任何内容。** ``` python3 strip.py --source ./photos ``` 每张手机拍摄的照片都嵌入了隐形元数据:你的 **精确 GPS 坐标**、设备型号、时间戳,有时甚至包括姓名。此脚本可一键清除所有内容。 ## 照片中隐藏了什么 你可能没有意识到,但每一张 JPEG 都包含如下数据: | 字段 | 示例 | 风险 | |---|---|---| | **GPS 纬度/经度** | 51.5074, -0.1278 | **你的精确位置** — 精确到米 | | **原始日期/时间** | 2026:04:15 09:23:41 | 你当时所在的时间 | | **相机型号** | iPhone 16 Pro Max | 识别你的设备 | | **序列号** | C8QH6T0GPX | 仅属于该设备的唯一标识 | | **作者/所有者** | John Smith | 设备设置中的你的名字 | | **软件** | iOS 19.4.1 | 你的操作系统版本 | | **镜头型号** | iPhone 16 Pro Max 后置摄像头 | 硬件指纹 | 将照片上传到不清理元数据的论坛、二手平台或社交网站(很多平台不会自动清理)后,任何人都可以下载并看到你居住、工作或旅行的确切位置。 ## 功能特性 - **清除所有元数据** — EXIF、GPS、IPTC、XMP、ICC 配置文件、缩略图、制造商注释等全部移除 - **审核模式** — 在清除前查看嵌入的完整数据;对隐私风险字段以红色高亮显示 - **GPS 提取** — 显示精确坐标并提供可点击的 Google Maps 链接,直观展示数据的危险性 - **批量处理** — 一条命令即可清理整个文件夹的照片 - **保留原始文件** — 默认将清理后的副本保存到 `clean/` 子文件夹中 - **原地模式** — 确认后可直接覆盖原文件(`--in-place`) - **JSON 输出** — 可将审核报告输出为 JSON,便于脚本或 CI 工具处理 - **跳过已清理文件** — 若照片无元数据,直接复制而不重新处理 - **仅一个依赖** — 仅需 [Pillow](https://pillow.readthedocs.io/) - **完全离线** — 不会上传任何数据(这违背了本工具的初衷) ## 安装 ``` pip install Pillow ``` 这是唯一的依赖。Python 3.8+ 版本。 ## 使用方法 ### 清理文件夹中所有照片的元数据 ``` python3 strip.py --source ./photos ``` 清理后的副本保存到 `./photos/clean/`。原始文件保持不变。 ### 先审核再清理(查看元数据但不修改) ``` python3 strip.py --source ./photos --audit ``` 输出彩色编码的报告,展示所有嵌入字段 — GPS 坐标会附带可点击的 Google Maps 链接。 ### 清理单张图片 ``` python3 strip.py --image vacation.jpg ``` 清理后的副本保存到 `./clean/vacation.jpg`。 ### 原地清理(覆盖原文件) ``` python3 strip.py --source ./photos --in-place ``` ⚠️ **不可恢复** — 原文件将被覆盖。确认无误后再使用。 ### 自定义输出文件夹 ``` python3 strip.py --source ./photos --output ~/Desktop/clean-photos ``` ### 生成 JSON 审核报告 ``` python3 strip.py --source ./photos --audit --json > report.json ``` 输出结构化 JSON 报告,适用于 CI、自动化流程或与其他工具集成。 ## 示例:审核输出 ``` ============================================================== photo-metadata-stripper — AUDIT REPORT ============================================================== ⚠️ vacation_beach.jpg 🔴 Camera Make: Apple 🔴 Camera Model: iPhone 16 Pro Max 🔴 Date/Time Original: 2026:03:15 14:22:31 🔴 Artist / Owner: John Smith 🔴 Software: iOS 19.4.1 🔴 Serial Number: C8QH6T0GPX Focal Length: 6.765 Exposure Time: 0.0025 📍 GPS DATA FOUND 🔴 GPS Latitude: (51, 30, 26.64) 🔴 GPS Longitude: (0, 7, 40.08) 📍 EXACT LOCATION: 51.507400, -0.127800 🗺️ Google Maps: https://www.google.com/maps?q=51.5074,-0.1278 ✅ screenshot.png — CLEAN (no metadata found) ============================================================== SUMMARY Files scanned : 2 With EXIF metadata : 1 With GPS coordinates : 1 Privacy-risky fields : 7 ⚠️ WARNING: 1 photo(s) contain your exact GPS location. Run without --audit to strip all metadata before sharing. ============================================================== ``` ## 示例:清理输出 ``` Source : /Users/you/photos Output : /Users/you/photos/clean Files : 5 [1/5] vacation_beach.jpg — STRIPPED (14 tags removed) (GPS: 51.5074, -0.1278 REMOVED) [2/5] selfie.jpg — STRIPPED (11 tags removed) [3/5] product_shot.jpg — STRIPPED (8 tags removed) [4/5] screenshot.png — already clean, skipping [5/5] sunset.jpg — STRIPPED (12 tags removed) (GPS: 34.0195, -118.4912 REMOVED) ================================================== Done. Stripped : 4 Clean : 1 Errors : 0 Output : /Users/you/photos/clean ``` ## 所有参数 | 参数 | 缩写 | 默认值 | 描述 | |---|---|---|---| | `--image` | `-i` | — | 单个要处理的图像文件 | | `--source` | `-s` | — | 要批量处理的图像文件夹 | | `--output` | `-o` | `clean/`(源文件同级) | 清理后图片的输出文件夹 | | `--audit` | `-a` | `False` | 仅显示元数据,不做任何修改 | | `--in-place` | | `False` | 直接覆盖原文件(不可恢复) | | `--json` | | `False` | 以 JSON 格式输出审核报告 | | `--no-colour` | | `False` | 禁用彩色输出 | `--image` 与 `--source` 互斥,请选择其中一项使用。 ## 支持格式 `.jpg` `.jpeg` `.png` `.tiff` `.tif` `.webp` ## 适用人群 - 🔒 **注重隐私的用户** — 在线分享照片前移除位置数据 - 📰 **记者** — 保护消息来源位置和设备身份 - ✊ **活动人士** — 从抗议或实地拍摄的照片中移除 GPS 轨迹 - 📸 **摄影师** — 在交付客户前清除相机序列号与设置信息 - 🛒 **二手卖家** — 从商品照片中移除家庭 GPS 坐标 - 🏢 **企业** — 防止员工设备数据在营销照片中泄露 - 👨‍💻 **开发者** — 在 CI/CD 中集成,自动清理上传图片的元数据 ## 工作原理 该脚本并非简单删除 EXIF 头,而是 **从原始像素数据重新生成图像**。这确保了: - 所有 EXIF、IPTC、XMP 元数据被彻底移除 - 可能包含 GPS 数据的嵌入缩略图被移除 - ICC 色彩配置文件被移除 - 相机特定的专有数据(Maker Notes)被移除 - 输出图像在像素层面与原始完全一致 —— 仅不可见的元数据被清除 ## 使用建议 - **先审核后清理**:使用 `--audit` 查看即将清除的内容,特别是 GPS 坐标 - **Google Maps 链接**:审核报告中的链接会打开照片的精确位置,可亲自验证 EXIF GPS 数据的精确程度 - **社交媒体差异**:Instagram、Twitter/X、Facebook 上传时会自动清理元数据,但许多论坛、二手平台(如 Craigslist、eBay)、约会应用和消息平台 **不会** - **截图通常已清理**:该脚本能自动跳过已无元数据的图片 - **先备份**:使用 `--in-place` 时,原文件无法恢复 ## 许可证 [MIT](LICENSE) — 可自由使用、修改和分发。 ## 贡献 欢迎提交问题和 Pull Request。若某类元数据格式未被正确检测或清除,请提供示例文件并提交问题。
标签:EXIF剥离, GPS脱敏, SEO: 本地EXIF剥离, SEO: 清除GPS坐标, SEO: 照片元数据清理, SEO: 相机信息去除, SEO: 隐私保护工具, 元数据审计, 元数据清理, 图片隐私, 安全分享, 审计模式, 批量处理, 数据清理, 本地处理, 照片去定位, 相机信息清除, 网络安全, 逆向工具, 隐私保护