1

我在stackowerflow上阅读了很多关于解决方案的问题和答案,但仍然找不到可以帮助解决我的问题的解决方案。

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

图像不是用创建的imageNamed:,所以它们没有兑现,所以[image1 isEqual:image2] 不应该工作。

据我了解,比较它们的唯一解决方案是这个:

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

但是图像的尺寸非常大,因此需要一些时间来比较。

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

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

4

1 回答 1

6

如果您需要比较像素相等的图像,而不是指针,您可以这样做:

创建图像时,您可以为每个图像创建某种哈希值。例如,所有像素值的总和(也许,以某个巨大的数字为模;也许,由像素位置提供支持)。

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

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

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

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

否则,只需像这样比较它们的指针地址

if(image1 == image2) { 
     ...
}
于 2013-03-13T15:41:28.953 回答