Iphone UIImagePNGRepresentation()返回不同的字节

Iphone UIImagePNGRepresentation()返回不同的字节,iphone,uiimage,png,nsdata,uiimagepngrepresentation,Iphone,Uiimage,Png,Nsdata,Uiimagepngrepresentation,我有一些透明的图像,我正在从文件系统加载到UIImageView视图中。出于我的目的,我需要将UIImageView中的图像与文件系统上的文件进行比较。所以我做了如下的事情: NSString *directoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *imageFile = [NSString strin

我有一些透明的图像,我正在从文件系统加载到
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图像。打印时,两个描述都不是空的。但它们是不平等的


为什么会发生这种情况?

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


你想达到什么目的?告诉我们,我们可以为您的问题提供更好的解决方案。

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


相反,您可以逐像素比较图像。有关获取UIImage的像素数据,请参见以下内容:

感谢您的回复。下面是我要做的:我有一个资源列表,这些资源是用md5散列存储的,我需要查找基于此散列选择的图像。我使用的md5方法需要一个
NSData
对象。因此问题就出现了:当
NSData
不相等时,散列会相应地不同,我找不到匹配的资源。你能详细说明一下吗?仅基于这一点,你就必须重新思考如何查找资源,因为写一张新图片需要大量的资源,很少能给你正确的答案。谢谢乔纳森——我是在查找当前图片,而不是写一张新图片。我想根据你的答案和Daniel的答案,我必须将图像的散列存储在一个(单独的)数组中,我可以在其中查找。