5

是否有 end-of-exif / end-of-xmp / end-of-iptc / start-of-data 标记,我可以使用它们来获取 jpg / jpeg(和其他图像格式)的数据部分的校验和?

4

6 回答 6

1

我认为这个问题与图像的核心图像数据(不包括元数据)的计算哈希有​​关,如果您正在寻找代码,https://stackoverflow.com/a/10075170/890106会给出一个答案元素.

但它可能不适用于所有 JPG 变体:其中一些可以嵌入多个图像(MPF / CIPA 多图片格式,更多信息请访问http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/ MPF.html),您可能仍然有一些元数据。此外,某些软件会在文件末尾以 --[0-9A-F]+-- 的形式放置一个 UID,不应读取它。最安全的解决方案,如果可能是校验和像素(尽管您仍然可以影响方向,颜色配置文件,......)。

于 2016-10-25T05:05:49.080 回答
0

您必须查看每种格式。对于 JPEG,看起来该结构意味着您可以对以 FFEn(例如 0xFFE1)开头的部分进行校验和,并对每个标记后指定的字节进行校验和(看起来长度跟随标记并且大 2 个字节-endian 格式)。有关更多详细信息,请参见此处

于 2009-12-28T21:29:29.213 回答
0

获得仅像素数据的哈希和的一种简单方法是将 JPEG 转换为 32 位 BMP 或 PNG 并从中计算哈希和。这将从 JPEG 中剥离所有相关信息,甚至会匹配具有不同编码的 JPEG,这些编码会导致相同的像素数据。当然,如果你有它,你当然也可以直接使用生成的 BMP 的内存像素数据(即 Windows 有几个 API 函数可以从任何支持的图像类型中获取它)。

于 2009-12-28T21:18:56.973 回答
0

是的 jpeg 和 exif,我不知道其他人。

我拥有的 JPEG 规范称为 JFIF(JPEG 文件交换格式),它来自 ISO 10918-1 的附件 B,与所有 ISO 规范一样,需要仔细阅读才能弄清楚如何将规范转换为数据结构。我认为更容易理解

EXIF 格式的解析很像 TIFF 格式。每个块都有一个类型和一个大小,所以你只需遍历这些块,直到你到达图像数据块。它有一个指向图像数据的指针(实际上是指向条带的指针,但我很确定您可以假设在第一个图像数据条带到文件末尾之后的所有内容都是图像数据。

exif 格式有自己的网站

于 2009-12-28T21:35:59.123 回答
0

MediaTags具有对 JPEG、MP3、M4A 等的校验和支持

于 2011-01-30T01:11:27.333 回答
0

由于您想对各种图像格式执行此操作,您应该只使用通用图像解压缩库并对未压缩数据运行校验和。这将允许您匹配相同的图像,即使它们在磁盘上的编码不同。

如果您想将自己限制为 JPEG,您可以对 SOI 和 EOI 之间的数据进行校验和。这个答案可以稍微适应做你需要的。

于 2009-12-30T17:54:18.670 回答