2014-10-10 15 views
3

獲得的照片框架爲iOS 8網址閱讀能夠返回一個URL使用PHImageFileURLKey圖像。但我似乎無法讀取此網址。我只需要讀取權限。到目前爲止,我試圖使用給定的URL的任何地方,它被視爲根本不存在文件。我如何使用URL獲取數據?從PHImageFileURLKey

PHFetchResult* phFetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil] 
PHImageManager *manager = [PHImageManager defaultManager]; 
PHImageRequestOptions* options = [[PHImageRequestOptions alloc] init]; 
options.synchronous = YES; // Force sequential work. We have nothing to do until this block returns. 
PHAsset* asset = [phFetchResult objectAtIndex:index]; 
[manager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage *resultImage, NSDictionary *info) 
{ 
    _image = resultImage; 
    NSURL* fileURL = [info objectForKey:@"PHImageFileURLKey"]; 
    _imageLocation = [fileURL relativePath]; 
}]; 

代碼深藏不露發現:

NSURL* fileURL = [info objectForKey:@"PHImageFileURLKey"]; 
NSLog(@"File exist?: %d", [[NSFileManager defaultManager] fileExistsAtPath:[fileURL relativePath]]); 

我目前的解決方法是把給定的UIImage並將其保存到/ tmp目錄中,並且成功返回PHAssets和URL

代碼然後使用該URL。這不是一個理想的解決方案,我真的很想知道PHImageFileURLKey的目的

+0

任何這運氣?我用PHImageFileURLKey保存了圖像,並需要弄清楚如何使用這些信息從照片庫中檢索它們。 – pnavk 2014-11-21 15:27:20

+0

照片仍然不可能。對於其他一些媒體類型,您可以獲得可用的URL。我堅持從PHAsset中檢索UIImage並將副本保存到我選擇的目錄中。爲顯示縮略圖網格,下面的方法很快:'[manager requestImageForAsset:asset targetSize:_thumbnailSize contentMode:PHImageContentModeDefault options:nil resultHandler:^(UIImage * resultImage,NSDictionary * info) { cell.imageView.image = resultImage ; }]' – 2014-12-02 21:37:33

+0

看看這個問題,我問有關這一點:http://stackoverflow.com/questions/27065705/photokit-ios8-retrieve-image-using-the-phimagefileurlkey – pnavk 2014-12-03 15:12:02

回答

1

我研究PHImageFileURLKey,我認爲沒有辦法通過PHImageFileURLKey找到圖像數據,但您可以通過使用資產本地標識符而不是PHImageFileURLKey

我供你參考代碼:

您可以使用資產的本地標識符,並響應獲取圖像。

PHFetchResult *savedAssets = [PHAsset fetchAssetsWithLocalIdentifiers:@[asset.localIdentifier] options:nil]; 
    [savedAssets enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) { 

     //this gets called for every asset from its localIdentifier you saved 
     PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init]; 
     imageRequestOptions.synchronous = YES; 
     imageRequestOptions.deliveryMode = PHImageRequestOptionsResizeModeFast; 

     [[PHImageManager defaultManager]requestImageForAsset:asset targetSize:CGSizeMake(50,50) contentMode:PHImageContentModeAspectFill options:imageRequestOptions resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 
      NSLog(@"get image from result"); 

     }]; 
    }];