由于从照片库编辑,PHImageManager无法正确获取照片

时间:2016-07-19 10:27:24

标签: ios objective-c iphone uiimage phasset

我有一个关于使用PHImageManager获取UIImages的奇怪问题。

当从iPhone的照片应用程序编辑请求的UIImage时,一切正常;

[[PHImageManager defaultManager] requestImageForAsset:[assets objectAtIndex:0] targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:requestOptions resultHandler:^void(UIImage *image, NSDictionary *info)
         {
             DebugLog(@"%ld", assets.count);
             @autoreleasepool
             {
                 if (image)
                 {
                     // Write image to system
                     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                     NSString *fileName = [NSString stringWithFormat:@"%ld_%@.jpg", (long)assets.count, [NSDate date]];
                     NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:fileName];
                     [UIImageJPEGRepresentation(image, 0.5) writeToFile:filePath atomically:YES];

                 }
         }];

但是如果用户在iPhone的自拍照编辑器中编辑了照片(即他/她裁剪了照片),则PHImageManager无法检索该照片。

没有编辑,resultHandler中提供的字典是正常的,称为" info":

{
PHImageFileOrientationKey = 0;
PHImageFileSandboxExtensionTokenKey = "5565e83d376d8c4e018b8ea41401e58e5aabbc18;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000003;000000000039a762;/private/var/mobile/Media/DCIM/113APPLE/IMG_3433.PNG";
PHImageFileURLKey = "file:///var/mobile/Media/DCIM/113APPLE/IMG_3433.PNG";
PHImageFileUTIKey = "public.png";
PHImageResultDeliveredImageFormatKey = 9999;
PHImageResultIsDegradedKey = 0;
PHImageResultIsInCloudKey = 0;
PHImageResultIsPlaceholderKey = 0;
PHImageResultOptimizedForSharing = 0;
PHImageResultRequestIDKey = 55;
PHImageResultWantedImageFormatKey = 9999;

}

但是从照片应用程序编辑之后,字典变为:

{
PHImageFileOrientationKey = 0;
PHImageResultDeliveredImageFormatKey = 4031;
PHImageResultIsDegradedKey = 1;
PHImageResultRequestIDKey = 56;
PHImageResultWantedImageFormatKey = 9998;

}

之前有人遇到过这个问题吗?

感谢您的回复。

2 个答案:

答案 0 :(得分:1)

我知道那里发生了什么。

在PHImageRequestOptions中,可以通过添加选项来选择照片的未调整版本;

requestOptions.version = PHImageRequestOptionsVersionUnadjusted;

有了这个,我成功地获得了图像(但是以未经调整的格式)。

任何人都可以在不调整图像的情况下找到进一步的解决方案,请评论我。

干杯。

答案 1 :(得分:0)

我现在来不及帮助你,但也许其他人将来会遇到同样的问题。

而不是PHImageRequestOptionsVersionUnadjusted使用PHImage​Request​Options​Delivery​Mode​High​Quality​Format

或者 Swift 使用,

requestOptions.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat

如果您查看highQualityFormat的文档:

  

照片仅提供最高质量的图像,无论如何   加载需要多长时间。如果isSynchronous属性是   true或者如果使用requestImageData(for:options:resultHandler :)   方法,此行为是默认的唯一选项(即,   指定其他传递模式选项无效。)