比较2个UIImage对象

时间:2013-03-13 15:35:02

标签: iphone ios objective-c uiimage compare

我已经在 stackowerflow 上阅读了很多关于解决方案的问题和答案,但仍无法找到有助于解决问题的解决方案。

所以我有两个非常大的图像,我需要比较它们。

图片不是使用imageNamed:创建的,因此不会兑现,因此[image1 isEqual:image2]不起作用。

根据我的理解比较它们的唯一解决方案就是这个:

- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2
{
    return [UIImagePNGRepresentation(image1) isEqual:UIImagePNGRepresentation(image2)];
}

但是图像的尺寸非常大,所以需要花一些时间进行比较。

是否有任何属性可以帮助您不使用上述方法检查它们是否相等?

例如,我可以获得image1.size并将其与image2.size进行比较,它们不相等,我不需要运行上面的方法。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:6)

如果您需要比较像素相等上的图片,而不是指针,则可以执行以下操作:

您可以在创建每个图像时为其创建某种哈希值。例如,总和 所有像素值(可能是模数较大的数字;也许是由像素位置驱动)。

然后,将该值存储在NSDictionary[image] = hashValue中。然后,当您比较图像时,首先比较它们的大小,如您所述,然后,如果它们相等,则从字典中比较它们的哈希值。

如果它们相等,则图像最可能相等,但您必须手动检查它才能100%确定。

手动检查可能需要一些时间,因此您可以通过发明自己的统计数据来减少碰撞的可能性(当不同的图像具有相同的哈希值时),例如MORE HASHES,不同的模数,散列的哈希值,左上角像素的值(开玩笑,但谁知道...)等等。

很明显,你拥有的统计数据越多,你得到的碰撞就越少。 实验领域:)

否则,只需比较它们的指针地址,如

if(image1 == image2) { 
     ...
}