【发布时间】:2009-12-28 21:04:50
【问题描述】:
是否有 end-of-exif / end-of-xmp / end-of-iptc / start-of-data 标记,我可以使用它们来获取 jpg / jpeg(和其他图片格式)?
【问题讨论】:
标签: jpeg checksum exif xmp iptc
是否有 end-of-exif / end-of-xmp / end-of-iptc / start-of-data 标记,我可以使用它们来获取 jpg / jpeg(和其他图片格式)?
【问题讨论】:
标签: jpeg checksum exif xmp iptc
我认为这个问题与Compute hash of only the core image data (excluding metadata) for an image 相关,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 函数可以从任何支持的图像类型中获取它)。
【讨论】:
对 jpeg 和 exif 是的,我不知道其他人。
我拥有的 JPEG 规范称为 JFIF(JPEG 文件交换格式),它来自 ISO 10918-1 的附件 B,并且与所有 ISO 规范一样,需要仔细阅读才能弄清楚如何将规范转换为数据结构。我认为this 更容易关注
EXIF 格式的解析与 TIFF 格式非常相似。每个块都有一个类型和一个大小,所以你只需遍历这些块,直到你到达图像数据块。它有一个指向图像数据的指针(实际上是指向条带的指针,但我很确定您可以假设从第一条图像数据到文件末尾的所有内容都是图像数据。
exif 格式有its own website
【讨论】:
您必须查看每种格式。对于 JPEG,它看起来像 the structure 意味着您可以对以 FFEn 开头的部分(例如 0xFFE1)进行校验和,并对每个标记后指定的字节进行校验和(看起来长度跟随标记并且是 2 个字节大端格式)。详情请见here。
【讨论】:
由于您想对各种图像格式执行此操作,您应该只使用通用图像解压缩库并对未压缩数据运行校验和。这将允许您匹配相同的图像,即使它们在磁盘上的编码不同。
如果您想限制自己使用 JPEG,您可以对 SOI 和 EOI 之间的数据进行校验和。 This answer 可以稍加调整以完成您的需要。
【讨论】:
MediaTags 具有对 JPEG、MP3、M4A 等的校验和支持
【讨论】: