我在stackowerflow上已阅读了很多有关该解决方案的问题和答案,但仍然找不到可以帮助解决我的问题的解决方案。
所以我有2个非常大的图像,我需要比较它们。
图像不是使用imageNamed:
创建的,因此它们不会兑现,因此[image1 isEqual:image2]
不起作用。
据我了解,比较它们的唯一解决方案是:
- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2
{
return [UIImagePNGRepresentation(image1) isEqual:UIImagePNGRepresentation(image2)];
}
但是图像的尺寸确实很大,因此需要一些时间进行比较。
是否有任何属性可以帮助您不要使用上面的方法检查它们是否相等?
例如,我可以获取
image1.size
并将其与image2.size
进行比较,如果它们不相等,则无需运行上述方法。有任何想法吗?谢谢。
最佳答案
如果您需要比较像素相等而不是指针的图像,则可以执行以下操作:
您可以在创建每个图像时为其创建某种哈希。例如,
所有像素值(可能是一些模的取模;也许是由像素位置决定的)。
然后,将该值存储在NSDictionary[image] = hashValue
中。然后,当您比较图像时,如上所述,首先比较它们的大小,然后,如果它们相等,则从字典中比较它们的哈希值。
如果它们相等,则图像很可能相等,但是您必须手动检查图像以确保100%保证。
手动检查可能会花费一些时间,因此您可以通过发明自己的统计信息(例如更多的哈希,不同的模数,哈希值的哈希值,最左上角像素的值(填充,但保留)来降低发生碰撞的可能性(当不同的图像具有相同的哈希值时)。谁知道...)等。
显而易见,拥有的统计数据越多,冲突就越少。
实验领域:)
否则,就这样比较它们的指针地址
if(image1 == image2) {
...
}
关于iphone - 比较2个UIImage对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389693/