Macos OSX:与图像相比,使用所有处理器

Macos OSX:与图像相比,使用所有处理器,macos,xcode7,nsdata,nsimage,Macos,Xcode7,Nsdata,Nsimage,我需要比较大约2000个图像,但是循环到图像中使用所有处理器 下面是我比较这些图像的方式: NSImage *file = [[NSImage alloc] initWithContentsOfFile:path]; NSImage *fileTwo = [[NSImage alloc] initWithContentsOfFile:pathTwo]; NSData *imgDataOne = [file TIFFRepresentation]; NSData *imgDataTwo = [fi

我需要比较大约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");
}

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

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

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


当然,没有必要创建每个文件的表示形式…

您需要仔细考虑并定义什么是“相等”。黑色32x32像素GIF和黑色32x32 PNG是否相等?两个外观相同但在不同日期创建的PNG文件是否相等?然后,您可以决定您的策略-您是否只需计算所有图像的MD5校验和,然后通过
uniq
或其他方式运行它们。@MarkSetchell但这是不消耗所有处理器和内存的最佳方法?您需要先回答另一个问题!最简单的方法是计算每个文件的校验和一次,并将它们全部存储在一个列表中,然后在列表中查找重复项-但如果你想将黑色GIF识别为与相同大小的黑色PNG匹配,那么这并不能告诉你正确的答案…@MarkSetchell所有图像都是jpg的,我正在比较jpg和jpg的图像,它们都是彩色的你发布的imagesCan和示例?获取文件大小的示例?这个链接实际上与您的问题非常相关