我正在整理一个脚本来查找大型图像库中的删除重复项。目前我正在进行两次过滤,首先查找相同大小的文件,然后在10240字节的文件上执行sha256,以获得具有相同大小的文件的指纹(代码here )。
它运行良好,但我猜我可能会使用jpeg格式内置校验和,而不是使用sha256。
有没有人知道是否有校验和或其他组件可以作为校验和/指纹?如果是这样,是否有一种有效的方式来访问它们?
答案 0 :(得分:4)
我认为JPEG规范不包含您所描述方式的任何校验和。
但JPEG可以包含缩略图作为其EXIF元数据的一部分。它不是一个完美的指标,因为两个不同的图像可能具有相同的缩略图。在图像经过实质性修改之后,至少有一个记录在案的情况下缩略图没有被替换,缩略图显示的内容远远超出了出版商的意图。
答案 1 :(得分:1)
自从我挖掘IJG库以来已经有一段时间了,但我认为没有简单的类成员或函数调用可以在那里检查某种类型的指纹。如果可以控制图像的编码,则可以使用内置的EXIF标记...
答案 2 :(得分:1)
我刚刚构建了一个非常相似的脚本。我不希望校验和元数据我想看看即使标签已被修改,实际图像是否重复。最好的不是按大小排序,而是按校验和istelf排序。我使用jhead删除元数据,然后校验整个文件(但我也考虑过只做一部分,但实际上我认为它不会节省太多时间)。 jhead不使用共享内存(管道)并覆盖,所以我只是先将文件复制到共享内存。我将校验和放在ImageDescription字段中,以便以后更快地检索。显然,这也允许稍后检查图像完整性,这也是我校验整个事物的原因之一。提示:对于一次一个基于决策的操作,exiv2读取和写入元数据的速度要快于exiftool。
答案 3 :(得分:0)
在JPEG标准(ITU-T.81)中,我认为对于整个压缩的jpeg图像文件,没有任何字段/语法元素具有校验和等。除非定制应用程序将此类文件放入应用程序段,或者作为标准中提供段的元数据。 所以为了达到你的目的,你所做的就是一个解决方案。 其他可能是某种应用程序包装器,它将调用一些二进制文件比较utlitiy(比如无法比较,甚至是windows命令 fc / b )并检查该比较实用程序的结果并做出决定u想要。
-AD
答案 4 :(得分:0)
您可以执行的一种方法是将所有图像缩小为固定大小,并将其存储为缩略图。然后,图像比较将比较相似大小的图像,并为您提供重复的机会 - 如果您裁剪(除非严重裁剪)或调整大小的图像并想要找到那些'重复',则非常有用。
答案 5 :(得分:0)
在XMP规范中,有文档ID和版本ID,它们应唯一标识图像的版本。
这些问题(以及任何其他基于元数据的识别方法)的问题在于某些应用程序可能无法遵守这些问题,因为这些应用程序可以更改相应更新元数据的jpeg的内容。