2008-10-20 27 views
3

我正在编写一个脚本来查找大型图像库中的删除重复项。此刻,我正在做一个两遍过滤器,首先查找相同大小的文件,然后在该文件的10240字节片段上执行sha256以获取具有相同大小(代码here)的文件的指纹。JPEG内置校验和/指纹?

它运作良好,但我猜有可能是校验建在,我可以改用做SHA256的JPEG格式。

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

+1

任何人试图类似的东西:本SHA系列是用于加密的目的和不必要的复杂,这种类型的应用,一个简单得多的CRC就足够了(但我不会做任何事情比MD5更加复杂)。由此产生的加速可以用来覆盖整个文件,而不是任意选择的10240.如果CRC与规格化大小的规格化(比如8字节)相结合,则第二遍是过时的。 – guidot 2012-07-10 08:50:28

回答

5

我不认为JPEG规范包括您所描述的方法的任何种类的校验和。

尽管JPEG可以包含缩略图作为其EXIF元数据的一部分。这不是一个完美的指标,因为两张不同的图像可能具有相同的缩略图。至少有一个记录的缩略图案例在图片经过大幅度修改之后不会被替换,但缩略图显示的内容远远超出了出版商的意图。

1

其已一段时间,因为我已经挖成IJG库,但我不认为有一个简单的类成员或函数调用,您可以使用那里检查某种类型的指纹。你可以使用内置的EXIF标签,如果你能控制图像的编码...

0

在JPEG标准(ITU-T.81)我相信没有具有校验和或这样,对于整个压缩的JPEG图像文件中的任何字段/语法元素。除非定制应用程序在应用程序段中放置这样的字段,或者作为标准中提供段的元数据。所以为了达到你的目的,你正在做的是一个soln。 其他可能是某种应用程序包装将调用一些二进制文件比较utlitiy(如无法比拟的,甚至是Windows命令FC/B)和检查的结果比较实用,并采取ü要的决定。

〜AD

0

一个你可以执行的办法就是减少所有图像,以一个固定的大小和存储为缩略图。然后,图像比较将比较相似大小的图像,并给你一个重复的机会 - 如果你裁剪(除非大量裁剪)或调整大小的图像,并希望找到那些'重复',则很有用。

1

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

0

在XMP规范中有文档ID和版本ID,它们应该唯一地标识图像的版本。

与这些(和与任何其他基于元数据的识别方法)的问题是,它可能不通过可以改变JPEG相应地更新元数据的内容一些应用中可以尊重。