【问题标题】:Compare 2 UIImage objects比较 2 个 UIImage 对象
【发布时间】:2013-03-13 15:35:02
【问题描述】:

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

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

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

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

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

但是图片的尺寸确实很大,所以比较需要一些时间。

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

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

【问题讨论】:

  • 如果它们已经在内存中,它们是否被缓存并不重要。虽然我没有尝试过,但我看不出有任何理由 isEqual: 不应该工作。你试过了吗?
  • 如何通过继承 UIImage 创建自定义对象并使用属性 e 扩展它。 G。 NSString *uniqueID 用于识别?
  • @Inafziger : 我试过 isEqual: ,没有帮助
  • 您是通过网络还是从本地文件系统/包中检索图像?
  • UIPasteBoard,这就是为什么@iDroid 的想法不匹配,因为来自粘贴板的图像不会有我的 uniqueId,所以我认为我应该计算一些哈希值。

标签: iphone ios objective-c uiimage compare


【解决方案1】:

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

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

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

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

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

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

否则就这样比较它们的指针地址

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

【讨论】:

  • if(image1 == image2) 在我的情况下也不起作用,但我喜欢一些散列的想法
  • 我还是有同样的问题,哈希拥抱图像并检查它也需要一些时间,所以我可以哈希一些属性或图像的一部分
  • 不客气,用一些关于碰撞和东西的信息更新了答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-26
  • 2022-01-11
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多