UIImagePNGRepresentation()返回不同的字节

时间:2011-01-07 20:06:07

标签: iphone uiimage png nsdata uiimagepngrepresentation

我有一些透明的图片,我正从文件系统加载到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。但他们是不平等的。

为什么会这样?

2 个答案:

答案 0 :(得分:5)

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

相反,您可以逐个像素地比较图像。请参阅以下内容以获取UIImage的像素数据:How to get pixel data from a UIImage (Cocoa Touch) or CGImage (Core Graphics)?

答案 1 :(得分:1)

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

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