UIImagePNGRepresentation () возвращает разные байты - PullRequest
2 голосов
/ 07 января 2011

У меня есть несколько изображений с прозрачностью, которые я загружаю из файловой системы в 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 ]

5 голосов
/ 07 января 2011

Вы не можете рассчитывать на представление PNG изображения, которое остается одинаковым по битам. Существует несколько способов кодирования одного и того же изображения, и, возможно, существуют также метаданные, которые могут изменяться в разных кодировках.

Вместо этого вы можете сравнивать изображения попиксельно. См. Следующее для получения данных пикселей UIImage: Как получить данные пикселей из UIImage (Cocoa Touch) или CGImage (Core Graphics)?

1 голос
/ 07 января 2011

UIImagePNGRepresentation() преобразует изображение в его общей не зависящей от типа форме в PNG со стандартными настройками.Несколько файлов PNG могут кодировать идентичные изображения, и когда вы читаете в PNG, вы теряете связанные метаданные, которые затем воссоздаются (потенциально по-разному) при записи нового файла PNG.пытаешься достичь?Скажите нам, и мы сможем дать вам лучшее решение вашей проблемы.

...