首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 8 PhotoKit。从iCloud照片共享相册中获取最大大小的图像

iOS 8 PhotoKit。从iCloud照片共享相册中获取最大大小的图像
EN

Stack Overflow用户
提问于 2014-09-15 06:11:01
回答 4查看 14.9K关注 0票数 16

如何从IС大声访问全尺寸图像?每次我试图得到这张照片,我得到的图像大小256x342。我也没看到进展。

代码:

代码语言:javascript
复制
    PHFetchResult *result = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetIdentifier] options:nil];
    PHImageManager *manager = [PHImageManager defaultManager];
    [result enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) {

        PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
        options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
        options.synchronous = YES;
        options.networkAccessAllowed = YES;
        options.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *info) {
            NSLog(@"%f", progress);
        };

        [manager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage *resultImage, NSDictionary *info)
         {
             UIImage *image = resultImage;
             NSLog(@"%@", NSStringFromCGSize(resultImage.size));
         }];
    }];

在我点击照片应用程序中的图片之前,这张图片的质量会很差。但只要我一点击图片,它就会下载到设备上,并且将是全尺寸的质量。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-16 19:40:00

我认为以下应该获得完整的分辨率图像数据:

代码语言:javascript
复制
 [manager requestImageDataForAsset:asset 
                           options:options 
                     resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) 
             { 
                  UIImage *image = [UIImage imageWithData:imageData]; 

                  //...

             }];

整个照片框架(PhotoKit)包括在WWDC视频中:https://developer.apple.com/videos/wwdc/2014/#511

希望这能有所帮助。

编辑:

resultHandler可以被调用两次。我在30点左右链接到的视频中解释了这一点。可能是你只得到缩略图和完整的图像将与第二次调用。

票数 15
EN

Stack Overflow用户

发布于 2014-09-19 18:08:34

我也有同样的问题。这要么是一个错误,要么是糟糕的文档。我已经能够通过指定所请求的2000x2000大小来解决这个问题。问题是,我确实得到了完整的图像,但有时它会被标记为退化,所以我一直在等待一个从未发生过的不同的图像。我就是这么做来解决这些问题的。

代码语言:javascript
复制
        self.selectedAsset = asset;

        self.collectionView.allowsSelection = NO;

        PHImageRequestOptions* options = [[[PHImageRequestOptions alloc] init] autorelease];
        options.synchronous = NO;
        options.version = PHImageRequestOptionsVersionCurrent;
        options.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;
        options.resizeMode = PHImageRequestOptionsResizeModeNone;
        options.networkAccessAllowed = YES;
        options.progressHandler =  ^(double progress,NSError *error,BOOL* stop, NSDictionary* dict) {
            NSLog(@"progress %lf",progress);  //never gets called
        };

        [self.delegate choosePhotoCollectionVCIsGettingPhoto:YES];  //show activity indicator
        __block BOOL isStillLookingForPhoto = YES;

        currentImageRequestId = [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(2000, 2000) contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *result, NSDictionary *info) {
            NSLog(@"result size:%@",NSStringFromCGSize(result.size));

            BOOL isRealDealForSure = NO;
            NSNumber* n = info[@"PHImageResultIsPlaceholderKey"]; //undocumented key so I don't count on it
            if (n != nil && [n boolValue] == NO){
                isRealDealForSure = YES;
            }

            if([info[PHImageResultIsInCloudKey] boolValue]){
                NSLog(@"image is in the cloud"); //never seen this. (because I allowed network access)
            }
            else if([info[PHImageResultIsDegradedKey] boolValue] && !isRealDealForSure){
                    //do something with the small image...but keep waiting
                [self.delegate choosePhotoCollectionVCPreviewSmallPhoto:result];
                self.collectionView.allowsSelection = YES;
                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //random time of 3 seconds to get the full resolution in case the degraded key is lying to me. The user can move on but we will keep waiting.
                    if(isStillLookingForPhoto){
                        self.selectedImage = result;
                        [self.delegate choosePhotoCollectionVCPreviewFullPhoto:self.selectedImage]; //remove activity indicator and let the user move on
                    }
                });
            }
            else {
                    //do something with the full result and get rid of activity indicator.
                if(asset == self.selectedAsset){
                    isStillLookingForPhoto = NO;
                    self.selectedImage = result;
                    [self.delegate choosePhotoCollectionVCPreviewFullPhoto:self.selectedImage];
                    self.collectionView.allowsSelection = YES;
                }
                else {
                    NSLog(@"ignored asset because another was pressed");
                }
            }
        }];
票数 2
EN

Stack Overflow用户

发布于 2014-11-27 15:48:41

要获得完整的大小图像,您需要检查信息列表。我用它来测试返回的结果是完整的图像,还是降级的版本。

代码语言:javascript
复制
if ([[info valueForKey:@"PHImageResultIsDegradedKey"]integerValue]==0){
    // Do something with the FULL SIZED image
} else {
    // Do something with the regraded image
}

或者你可以用这个来确认你是否得到了你要的东西。

代码语言:javascript
复制
if ([[info valueForKey:@"PHImageResultWantedImageFormatKey"]integerValue]==[[info valueForKey:@"PHImageResultDeliveredImageFormatKey"]integerValue]){
    // Do something with the FULL SIZED image
} else {
    // Do something with the regraded image
}

还有一些其他的,无证但有用的钥匙。

"/private/var/mobile/Media/DCIM/100APPLE/IMG_0780.JPG";= 3;PHImageFileSandboxExtensionTokenKey = "file:///var/mobile/Media/DCIM/100APPLE/IMG_0780.JPG";PHImageFileURLKey = "public.jpeg";PHImageResultDeliveredImageFormatKey = 9999;PHImageResultIsDegradedKey = 0;PHImageResultIsInCloudKey = 0;PHImageResultIsPlaceholderKey = 0;PHImageResultRequestIDKey = 1;PHImageResultWantedImageFormatKey = 9999;

玩得开心。莱纳斯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25841795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档