2

我有一些透明的图像,我从文件系统加载到UIImageView视图中。出于我的目的,我需要将 中的图像UIImageView与文件系统上的文件进行比较。所以我做了如下的事情:

NSString *directoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *imageFile = [NSString stringWithFormat:@"%@/image.png", directoryPath];

if ([[NSData dataWithContentsOfFile:imageFile] isEqualToData:UIImagePNGRepresentation([imageView image])]) {
    NSLog(@"Equal");
} else {
    NSString *dataDescription = [[[NSData dataWithContentsOfFile:feltFile] description] substringToIndex:100];
    NSString *imageDescription = [[UIImagePNGRepresentation([backgroundImageView image]) description] substringToIndex:100]
    NSLog(@"Unequal: %@ %@", dataDescription, imageDescription);
}

我知道它们是PNG图像。当我打印它时,这两个描述都不是 NULL。但它们是不平等的。

为什么会这样?

4

2 回答 2

5

您不能指望图像的 PNG 表示保持相同的位。有多种方法可以对同一图像进行编码,并且可能还有可以在编码之间更改的元数据。

相反,您可以逐个像素地比较图像。请参阅以下内容以获取 UIImage 的像素数据:如何从 UIImage (Cocoa Touch) 或 CGImage (Core Graphics) 获取像素数据?

于 2011-01-07T20:19:36.277 回答
1

UIImagePNGRepresentation()将通用类型无关形式的图像转换为具有标准化设置的 PNG。多个 PNG 文件可以对相同的图像进行编码,当您读取 PNG 时,您会丢失相关的元数据,然后在您写出新的 PNG 文件时重新创建(可能不同)。

你想要完成什么?告诉我们,我们可以为您提供更好的解决方案。

于 2011-01-07T20:14:25.950 回答