Знаете ли вы, есть ли способ получить те же данные NSData изображения (JPG, PNG) после сохранения с помощью PHPhotoLibrary
или нет?
OfC, iOS изменит некоторые метаданные и EXIF
-> (метка времени, ...) после сохранения, но я спрашиваю о данных UIImage ( включает те же данные EXIF ).
Я не скопировал EXIF в моем коде здесь, но он не работает
так что давайте поговорим о коде:
Сохранить изображение и получить хеш
UIImage * tmp = [[UIImage alloc] initWithData:tmpData];
tmpData =UIImageJPEGRepresentation(tmp, 1.0);
self.str1 = [tmpData MD5];
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetResourceCreationOptions *options = [[PHAssetResourceCreationOptions alloc] init];
options.originalFilename = @"XXX";
PHAssetCreationRequest * createReq = [PHAssetCreationRequest creationRequestForAsset];
[createReq addResourceWithType:PHAssetResourceTypePhoto data:tmpData options:options];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
NSLog(@":%d",success);
}];
Загрузить то же изображение:
[asset requestContentEditingInputWithOptions:0 completionHandler:^(PHContentEditingInput * _Nullable contentEditingInput, NSDictionary * _Nonnull info) {
PHImageRequestOptions * option = [[PHImageRequestOptions alloc] init];
option.synchronous = YES;
option.version = PHImageRequestOptionsVersionOriginal;
option.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
option.resizeMode = PHImageRequestOptionsResizeModeNone;
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:option resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
UIImage * image = [UIImage imageWithData:imageData];
NSData * tmpDAt = UIImageJPEGRepresentation(image, 1.0);
NSString * md5 = [tmpDAt MD5];
if ([md5 isEqualToString:self.str1]) {
NSLog(@"My Expextation");
}
}];
Интересная вещь, которую я обнаружил, это то, что если я обрезаю свое изображение до 1*1
для теста, я получаю некоторую ошибку (JPEGDecompressSurface : Picture decode failed:
) во время сохранения (кажется, ОС не может изменить изображение), поэтому я получаю тот же хеш раньше и после сохранения :)!