【发布时间】:2018-11-19 11:58:34
【问题描述】:
您知道在使用PHPhotoLibrary 保存后是否有任何方法可以获取相同的图像 NSData(JPG、PNG)?
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:)(似乎操作系统无法修改图像)所以我之前得到了相同的哈希值保存后:)!
【问题讨论】:
标签: ios objective-c phasset phphotolibrary