2016-03-15 155 views
0

我想從我的照片流中獲取照片。我只有PHAsset的localIdentifier。如何從我的照片流專輯中獲取照片

對於「我的照片流」相冊以外的照片,我正在使用以下代碼檢索PHAsset。

[PHAsset fetchAssetsWithLocalIdentifiers:@[「localIdentifier」] options:nil].firstObject 

localIdentifier就像 '1BFC3BA2-AC95-403A-B4FF-B26AFB631581/L0/001'

它的正常工作。但在我的「我的照片流」專輯中,我獲得了PHAsset的零值。

有沒有人有一個想法如何我們可以從我的照片流使用PHAsset的localIdentifier值獲取原始照片?

回答

1

我自己得到了答案。我檢索所有照片流照片並將其與特定的localIdentifier進行比較。以下是我的代碼。

PHFetchOptions *userAlbumsOptions = [PHFetchOptions new]; 
      userAlbumsOptions.predicate = [NSPredicate predicateWithFormat:@"estimatedAssetCount > 0"]; 
      PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumMyPhotoStream options:userAlbumsOptions]; 

      [userAlbums enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx1, BOOL *stop) { 
       NSLog(@"album title %@", collection.localizedTitle); 
       PHFetchOptions *fetchOptions = [PHFetchOptions new]; 
       fetchOptions.predicate = [NSPredicate predicateWithFormat:@"self.localIdentifier CONTAINS [cd] 'my identifier value'"]; 
       PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:collection options:fetchOptions]; 
       [assetsFetchResult enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop1) { 
        [[PHImageManager defaultManager] requestImageDataForAsset:asset options:option resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { 
         UIImage *imgResult = [UIImage imageWithData:imageData scale:1]; 
        }]; 
       }]; 
      }] 
1

請使用此鏈接http://qiita.com/to_obara/items/e386040abcc93842745b作爲swift代碼。按照上面的鏈接,我寫下了目標C代碼。

PHAsset *phAsset; 
PHFetchOptions *optionsForFetch = [[PHFetchOptions alloc] init];; 
optionsForFetch.includeHiddenAssets = YES; 
NSURL *alURL = [info valueForKey: UIImagePickerControllerReferenceURL]; 
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs: @[alURL] options: nil]; 
if (fetchResult.count > 0) { 
    return; 
} 

NSString *str = alURL.absoluteString; 
NSString *localIDFragment = [[[[str componentsSeparatedByString: @"="] objectAtIndex: 1] componentsSeparatedByString: @"&"] objectAtIndex: 0]; 
PHFetchResult *fetchResultForPhotostream = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumMyPhotoStream options: nil]; 

if (fetchResultForPhotostream.count > 0) { 
    PHAssetCollection *photostream = fetchResultForPhotostream [0]; 
    PHFetchResult *fetchResultForPhotostreamAssets = [PHAsset fetchAssetsInAssetCollection:photostream options:optionsForFetch]; 

    if (fetchResultForPhotostreamAssets.count > 0) { 
     NSIndexSet *i = [NSIndexSet indexSetWithIndexesInRange: NSMakeRange(0, fetchResultForPhotostreamAssets.count)]; 
     //let i=NSIndexSet(indexesInRange: NSRange(location: 0,length: fetchResultForPhotostreamAssets.count)) 

     [fetchResultForPhotostreamAssets enumerateObjectsAtIndexes: i options: NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
      PHAsset *target = obj; 
      NSString *identifier = target.localIdentifier; 
      if ([identifier rangeOfString: localIDFragment].length != 0) { 
       if (target) { 
        // get photo info from this asset 
        PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init]; 
        imageRequestOptions.synchronous = YES; 
        [[PHImageManager defaultManager] 
        requestImageDataForAsset:target 
        options:imageRequestOptions 
        resultHandler:^(NSData *imageData, NSString *dataUTI, 
            UIImageOrientation orientation, 
            NSDictionary *info) 
        { 
         if ([info objectForKey:@"PHImageFileURLKey"]) { 
          // path looks like this - 
          // file:///var/mobile/Media/DCIM/###APPLE/IMG_####.JPG 
          NSURL *path = [info objectForKey:@"PHImageFileURLKey"]; 
          selectedImageName = path.absoluteString; 
          [imagesDictArray addObject: [@{@"image": tempImage, @"imageUrl": selectedImageName} mutableCopy]]; 
         } 
        }]; 
       } 
       // 
      } 
      }]; 
    } 
}