2011-01-07 27 views
2

我有一些透明的圖像,我從文件系統加載到UIImageView視圖。爲了我的目的,我需要將UIImageView中的圖像與文件系統上的文件進行比較。所以我做了以下幾件事:UIImagePNGRepresentation()返回不同的字節

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。但他們不平等。

這是怎麼發生的?

回答

1

UIImagePNGRepresentation()將圖像以其通用類型不可知的形式轉換爲具有標準化設置的PNG。多個PNG文件可以編碼相同的圖像,並且當您讀取PNG時,會丟失相關的元數據,然後在您寫出新的PNG文件時重新創建(可能不同)。

你試圖完成什麼?告訴我們,我們可以給你一個更好的解決你的問題。

+0

感謝您的迴應。以下是我想要做的事情:我有一個使用md5散列存儲的資源列表,我需要查找基於此散列選擇的圖像。我使用的md5方法需要一個'NSData'對象。因此,問題是:當'NSData'不等於哈希是相應的不同,我沒有找到匹配的資源。 –

+2

你能詳細說一下嗎?僅以此爲基礎,您將不得不重新考慮如何查看資源,因爲寫出新映像需要大量資源,很少會給您正確的答案。 –

+0

感謝喬納森 - 我正在查找當前的圖像,而不是寫一個新的。我認爲根據你的答案和丹尼爾的,我將不得不將圖像的散列存儲在一個(單獨的)陣列中,我可以查找。 –