校验JPEG数据的校验和(不是整个文件)

6

是否有exif / xmp / iptc的结束标记或数据起始标记,可以用来获取jpg / jpeg(以及其他图像格式)中仅数据部分的校验和?

6个回答

2

我认为这个问题与这个问题相关:计算图像的核心数据(不包括元数据)的哈希值https://dev59.com/i2kw5IYBdhLWcg3wMHkY#10075170 提供了一个代码示例。

然而,它可能无法处理所有JPG文件变体:其中一些可以嵌入多个图像(MPF / CIPA多图片格式,更多信息请参见 http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/MPF.html),你仍然可能具有一些元数据。此外,一些软件会在文件末尾以--[0-9A-F]+--的形式放置UID,不应读取该UID。最安全的解决方案可能是校验像素(虽然您仍然可能受到方向、颜色配置文件等的影响)。


0

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


2
解码后的JPEG图像可能会因解码器中使用的舍入方式而有所不同。通常情况下,您可能看不出差异,但它会改变校验和。 - Mark Ransom

0

你需要查看每种格式。对于JPEG格式,结构表明你可以对以FFEn(例如0xFFE1)开头的部分进行校验和,并对每个标记后指定的字节进行校验和(看起来长度跟随标记并且是大端格式的2个字节)。更多细节请参见这里


据我所知,0xFFE?标记就是元数据。你读到了什么让你这么想? - coolaj86
看起来这是元数据的边界(例如从FFE1开始获取长度,然后该长度的数量就是EXIF数据)。请参阅http://www.media.mit.edu/pia/Research/deepview/exif.html#ExifMarker。 - Jeff Moser

0

支持jpeg和exif,其他的我不清楚。

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

EXIF格式类似于TIFF格式进行解析。每个块都有一个类型和大小,因此您只需遍历块,直到到达图像数据块。它具有指向图像数据的指针(实际上是指向条带的指针,但我非常确定您可以假设图像数据第一条带之后的所有内容直到文件结尾都是图像数据)。

Exif格式具有自己的网站


0

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

如果您想限制自己只使用JPEG,则可以在SOI和EOI之间对数据进行校验和。 此答案 可以稍微调整以满足您的需求。


0

MediaTags 支持 JPEG、MP3、M4A 等文件的校验和功能。


项目概述仍然没有明确说明支持哪些细节 - 主要目的似乎是提取嵌入的图片... - AmigoJack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接