简体中文

图像和照片·图像元数据隐私工具

浏览器如何从 JPEG 读取 EXIF 而无需上传

· 工作原理

exif 图像隐私 浏览器处理 文件格式

一张照片在一个浏览器内变成本地字节、JPEG 段和可读 EXIF 字段
原始 ToolAcre 矢量图

演练将 JPEG 放到页面上并查看其元数据之间实际发生的情况:在本地读取字节,定位 APP1 段,并在 JavaScript 中对其中的 TIFF 目录进行解码,不涉及服务器。

测试的声明:“没有上传任何内容”——为什么元数据检查器只需要读取已有的字节,以及如何确认没有请求离开选项卡

照片未上传的声明是可测试的而不是装饰性的。该工具将选定的文件读入 ArrayBuffer,将其转换为字节并将这些字节直接传递给元数据读取器。它的隐私声明谨慎地限制了承诺:照片在浏览器选项卡中进行解析,不存储任何副本,并且公开的分析请求与处理文件的代码路径是分开的。

使用文件 API 在本地读取文件 — 浏览器如何将照片的 ArrayBuffer 传递给工具,而无需字节离开设备

文件选择器提供浏览器 File 对象,并且 file.arrayBuffer() 使其内容可供页面中已运行的 JavaScript 使用。 ToolAcre 强制执行 50 MB 上限,然后从字节本身识别 JPEG、PNG 或 WebP。此本地读取不需要表单提交或图像上传端点,并且网络隔离测试在不记录请求的情况下测试所有三种支持的格式。

查找 APP1 段 — 将 JPEG 标记从 SOI 移动到“Exif”标头,并跳过携带 ICC 或 XMP 的段

对于 JPEG,读取器在图像开始标记之后开始,并遍历标记段直到扫描开始标记。它识别以 Exif 开头的 APP1 有效负载并解析这些负载,而仅检测到 XMP 以进行删除,并故意保留 ICC 作为渲染数据。从扫描标记开始的所有内容都属于压缩图片路径,而不是 EXIF 报告。

解码 TIFF 标头和 IFD — 字节顺序(II 或 MM)、IFD0 的偏移量以及指向 Exif 和 GPS 子目录的 12 字节条目

EXIF 有效负载包含 TIFF 块。解析器读取 II 或 MM 字节顺序标记,检查 TIFF 魔术值并跟踪 IFD0 的偏移量。每个目录条目提供标签、类型、计数以及内联值或偏移量。从 IFD0 开始,代码仅遵循 Exif 和 GPS 子目录指针,保持遍历有界,而不是追逐每个可能的私有结构。

将原始标签值转换为可读字段 - 标签 ID、数据类型、有理数和 ASCII 字符串,以及为什么某些值需要查找表

原始值仅在其类型和标签被解释后才变得有用。读取分子和分母后,ASCII 字段变为字符串,数字类型使用 TIFF 字节顺序,有理对变为数字。标签字典标记相机制造商、型号、时间戳、软件、序列字段和 GPS 值,然后将位置和设备身份分类在不太敏感的技术字段之前。

工作示例:在主线程上解析的手机照片

工作簿将此示例描述为在 Web Worker 中运行,但附带的面板在等待 file.arrayBuffer() 后直接调用 readMetadata;没有工人参与这条路径。因此,在页面主线程上读取并解析选定的电话 JPEG,之后将所有纬度和经度打印为数字,并呈现完整的字段表。更正很重要,因为本地处理和工人处理是不同的声明。

这不包括什么 - MakerNote 内部结构、RAW 格式、HEIC 和视频容器不在本演练和工具之外

读者故意不完整。它不会解码 MakerNote 内部结构、IFD1 缩略图字段、JPEG XMP 内容或不受支持的 RAW、HEIC、AVIF、TIFF、GIF 和 SVG 容器。损坏的 EXIF 段会被跳过,因此它不会阻止以后的删除。空报告仅意味着该有界解析器没有找到可读字段,而不意味着每个可能的信息通道都不存在。

要点:读取元数据是一项本地字节级工作 — 图像元数据隐私工具正是执行此操作,因此您可以在共享之前进行检查,而无需信任服务器

当实现将所选字节保留在选项卡中并且不对它们执行任何请求时,读取元数据是本地字节级作业。使用报告来识别该解析器可以看到的内容,然后在需要清理副本时使用单独的删除操作。检查永远不会改变原始照片,源代码和网络隔离测试提供了比通用浏览器处理徽章更强有力的证据。