我已经在 stackowerflow 上阅读了很多关于解决方案的问题和答案,但仍无法找到有助于解决问题的解决方案。
所以我有两个非常大的图像,我需要比较它们。
图片不是使用imageNamed:
创建的,因此不会兑现,因此[image1 isEqual:image2]
不起作用。
根据我的理解比较它们的唯一解决方案就是这个:
- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2
{
return [UIImagePNGRepresentation(image1) isEqual:UIImagePNGRepresentation(image2)];
}
但是图像的尺寸非常大,所以需要花一些时间进行比较。
是否有任何属性可以帮助您不使用上述方法检查它们是否相等?
例如,我可以获得image1.size
并将其与image2.size
进行比较,它们不相等,我不需要运行上面的方法。有任何想法吗?谢谢。
答案 0 :(得分:6)
如果您需要比较像素相等上的图片,而不是指针,则可以执行以下操作:
您可以在创建每个图像时为其创建某种哈希值。例如,总和 所有像素值(可能是模数较大的数字;也许是由像素位置驱动)。
然后,将该值存储在NSDictionary[image] = hashValue
中。然后,当您比较图像时,首先比较它们的大小,如您所述,然后,如果它们相等,则从字典中比较它们的哈希值。
如果它们相等,则图像最可能相等,但您必须手动检查它才能100%确定。
手动检查可能需要一些时间,因此您可以通过发明自己的统计数据来减少碰撞的可能性(当不同的图像具有相同的哈希值时),例如MORE HASHES,不同的模数,散列的哈希值,左上角像素的值(开玩笑,但谁知道...)等等。
很明显,你拥有的统计数据越多,你得到的碰撞就越少。 实验领域:)
否则,只需比较它们的指针地址,如
if(image1 == image2) {
...
}