是否有 end-of-exif / end-of-xmp / end-of-iptc / start-of-data 标记,我可以使用它们来获取 jpg / jpeg(和其他图像格式)的数据部分的校验和?
6 回答
我认为这个问题与图像的核心图像数据(不包括元数据)的计算哈希有关,如果您正在寻找代码,https://stackoverflow.com/a/10075170/890106会给出一个答案元素.
但它可能不适用于所有 JPG 变体:其中一些可以嵌入多个图像(MPF / CIPA 多图片格式,更多信息请访问http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/ MPF.html),您可能仍然有一些元数据。此外,某些软件会在文件末尾以 --[0-9A-F]+-- 的形式放置一个 UID,不应读取它。最安全的解决方案,如果可能是校验和像素(尽管您仍然可以影响方向,颜色配置文件,......)。
获得仅像素数据的哈希和的一种简单方法是将 JPEG 转换为 32 位 BMP 或 PNG 并从中计算哈希和。这将从 JPEG 中剥离所有相关信息,甚至会匹配具有不同编码的 JPEG,这些编码会导致相同的像素数据。当然,如果你有它,你当然也可以直接使用生成的 BMP 的内存像素数据(即 Windows 有几个 API 函数可以从任何支持的图像类型中获取它)。
MediaTags具有对 JPEG、MP3、M4A 等的校验和支持
由于您想对各种图像格式执行此操作,您应该只使用通用图像解压缩库并对未压缩数据运行校验和。这将允许您匹配相同的图像,即使它们在磁盘上的编码不同。
如果您想将自己限制为 JPEG,您可以对 SOI 和 EOI 之间的数据进行校验和。这个答案可以稍微适应做你需要的。