7

我正在编写一个脚本来查找大型图像库中的删除重复项。目前我正在做一个两通过滤器,首先查找相同大小的文件,然后对文件的 10240 字节片段执行 sha256 以获得具有相同大小的文件的指纹(此处的代码)。

它工作得很好,但我猜可能有内置于 jpeg 格式的校验和,我可以使用它来代替 sha256。

有谁知道是否有校验和或其他可以充当校验和/指纹的组件?如果是这样,是否有一种有效的方法来访问它们?

4

6 回答 6

5

我认为 JPEG 规范不包含您所描述的任何类型的校验和。

不过,JPEG 可以包含缩略图作为其 EXIF 元数据的一部分。这不是一个完美的指标,因为两个不同的图像可能具有相同的缩略图。至少有一个记录在案的情况是,在图像经过大量修改后,缩略图没有被替换,称缩略图显示的内容远远超出了出版商的预期。

于 2008-10-20T05:01:17.230 回答
1

自从我研究 IJG 库以来已经有一段时间了,但我认为没有一个简单的类成员或函数调用可以用来检查某种类型的指纹。如果您可以控制图像的编码,则可以使用内置的 EXIF 标签...

于 2008-10-20T05:00:23.020 回答
1

我刚刚构建了一个非常相似的脚本。我不想校验和元数据我想查看实际图像是否重复,即使标签已被修改。最好的方法不是按大小排序,而是按校验和 istelf 排序。我使用 jhead 删除元数据,然后对整个文件进行校验和(但我也想过只做一部分,但实际上我认为它不会节省太多时间)。jhead 不使用共享内存(管道)并且会覆盖,所以我只是先将文件复制到共享内存。我将校验和放在 ImageDescription 字段中,以便以后更快地检索。显然,这也允许稍后检查图像完整性,这也是我校验整个事情的部分原因。提示:exiv2 在读取和写入元数据方面比 exiftool 在一次基于决策的操作方面快得多。

于 2011-01-03T04:13:52.763 回答
0

在JPEG标准(ITU-T.81)中,我相信对于整个压缩的jpeg图像文件,没有任何具有校验和等的字段/语法元素。除非定制的应用程序将此类文件放在应用程序段中,或者作为标准中提供的段的元数据。因此,为了达到您的目的,您所做的只是一个解决方案。其他可能是某种应用程序包装器,它将调用一些二进制文件比较实用程序(例如超越比较,甚至是 Windows 命令fc /b)并检查该比较实用程序的结果并做出您想要的决定。

-广告

于 2008-10-20T05:04:10.267 回答
0

您可以执行的一种方法是将所有图像缩小到固定大小并将其存储为缩略图。然后,图像比较将比较相似大小的图像,并为您提供复制的机会 - 如果您已裁剪(除非裁剪严重)或调整大小的图像并希望找到那些“重复”,这很有用。

于 2008-10-20T13:06:38.717 回答
0

In the XMP specification there are document ID and version ID which should uniquely identify the version of the image.

The problem with these (and with any other metadata-based identification method) is that it might not be respected by some applications that can change the content of the jpeg updating the metadata accordingly.

于 2012-09-09T11:53:21.243 回答