格式比较
JPEG 与 PNG 的元数据,不住在同一种结构里
“图片元数据”听起来像一个统一标签,实际文件格式却用不同的容器规则组织数据。可靠清理不能只查找可见字符串,也不能简单截掉固定长度;它需要验证签名,读取每个段或块声明的长度,辨认类型并保留图像解码所需部分。理解这种差异,也有助于判断工具所说的“无损”具体指什么。
JPEG:标记段与扫描数据
JPEG 文件由一系列标记组织。APP1 常承载 EXIF 或 XMP,APP13 常见 IPTC 和 Photoshop 资源,COM 用于注释;真正的压缩图像进入扫描数据后有另一套字节规则。Metastrip 在扫描开始前解析段长度,删除常见隐私元数据,原样保留扫描数据,所以没有 JPEG 再压缩。APP2 中的 ICC 配置通常决定颜色如何映射,删除它可能让照片在不同屏幕上偏色,因此工具有意保留这类显示信息。
PNG:带校验值的独立块
PNG 在固定签名之后排列多个块,每块包含长度、四字符类型、内容和 CRC。像素数据存放于 IDAT,说明文字可放在 tEXt、iTXt 或 zTXt,EXIF 则可使用 eXIf。清理时整块删除目标类型,其他块连同原有校验值直接保留,不解压或重压 IDAT。PNG 还可能包含影响显示的颜色、伽马和透明度块,它们不应仅因为“不是像素”就被盲目移除。
WebP:RIFF 容器中的块
WebP 使用 RIFF 布局,块有四字符名称、长度和偶数字节填充。扩展 WebP 可用 EXIF 与 XMP 块保存信息,并在 VP8X 头中声明相应功能。删除块之后必须同步清除标志并修正整个 RIFF 文件长度,否则部分解码器会把文件视为不一致。当前工具执行这种容器级删除,不重新编码 VP8、VP8L 或动画帧;但非标准私有信息仍可能超出识别范围。
无损不等于绝对匿名
这里的无损表示原有压缩像素码流没有因清理而再编码,不代表“所有非像素信息全部删除”,更不代表来源无法推断。ICC、尺寸、编码特征、文件大小与可见画面仍然存在,文件名也由用户环境决定。如果目标是日常公开分享,可以清理副本并复核关键字段;如果需要证据销毁或强匿名化,应采用经过定义和验证的专业流程。