【问题标题】:OS X: comparing to images use all the processorOS X:与图像相比使用所有处理器
【发布时间】:2015-12-02 21:20:52
【问题描述】:

我需要比较大约 2000 张图像,但循环进入图像会使用所有处理器。

这是我比较图像的方式:

NSImage *file = [[NSImage alloc] initWithContentsOfFile:path];
NSImage *fileTwo = [[NSImage alloc] initWithContentsOfFile:pathTwo];
NSData *imgDataOne = [file TIFFRepresentation];
NSData *imgDataTwo = [fileTwo TIFFRepresentation];

if ([imgDataOne isEqualToData: imgDataTwo])
{
    NSLog(@"is the same image");
}

我在比较中做错了什么,或者如何在不占用计算机处理器的情况下比较图像?

【问题讨论】:

  • 您需要仔细考虑并定义什么是“等于”。黑色 32x32 像素 GIF 和黑色 32x32 PNG 是否相等?两个外观相同但在不同日期创建的 PNG 文件是否相等?然后你可以决定你的策略 - 是否简单地计算所有图像的 MD5 校验和并通过uniq 或其他方式运行它们。
  • @MarkSetchell 但这是不消耗所有处理器和内存的最佳方法?
  • 你需要先回答另一个问题!最简单的方法是计算每个文件的校验和一次并将它们全部存储在一个列表中,然后在列表中查找重复项 - 但如果您希望将黑色 GIF 识别为匹配相同大小的黑色PNG...
  • @MarkSetchell 所有图片都是 jpg 我比较 jpg 和 jpg 是彩色图片

标签: macos xcode7 nsdata nsimage


【解决方案1】:

最快的方法是获取所有文件的列表,然后为每个文件获取其大小,然后说大小不同的文件不能相等。这很快,因为它甚至不需要您从磁盘读取文件。

一旦找到两个或更多大小相同的文件,您可以对它们进行 MD5 校验和,以查看内容是否相同 - 如果在计算它们时存储 MD5 校验和,这再次比比较每对文件更快,因为每个文件只读取一次。

当然没有必要为每个文件创建TIFFRepresentation...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2015-04-04
  • 2012-08-21
相关资源
最近更新 更多