如何从我的照片流相册中获取照片
How to get photo from My Photo Stream Album
我想从我的照片流中获取照片。我只有 PHAsset 的 localIdentifier。
对于“我的照片流”相册以外的照片,我使用以下代码来检索 PHAsset。
[PHAsset fetchAssetsWithLocalIdentifiers:@[“localIdentifier”] options:nil].firstObject
localIdentifier 类似于“1BFC3BA2-AC95-403A-B4FF-B26AFB631581/L0/001
”
一切正常。但是在我的 My Photo Stream 相册中,我得到的 PHAsset 值为 nil。
有谁知道如何使用 PHAsset 的 localIdentifier 值从我的照片流中获取原始照片?
我自己得到了答案。我检索所有照片流照片并将其与特定的 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];
}];
}];
}]
请将此 link http://qiita.com/to_obara/items/e386040abcc93842745b 用于 swift 代码。我已经按照上面的 link.
编写了下面的 objective 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]];
}
}];
}
//
}
}];
}
}
我想从我的照片流中获取照片。我只有 PHAsset 的 localIdentifier。
对于“我的照片流”相册以外的照片,我使用以下代码来检索 PHAsset。
[PHAsset fetchAssetsWithLocalIdentifiers:@[“localIdentifier”] options:nil].firstObject
localIdentifier 类似于“1BFC3BA2-AC95-403A-B4FF-B26AFB631581/L0/001
”
一切正常。但是在我的 My Photo Stream 相册中,我得到的 PHAsset 值为 nil。
有谁知道如何使用 PHAsset 的 localIdentifier 值从我的照片流中获取原始照片?
我自己得到了答案。我检索所有照片流照片并将其与特定的 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];
}];
}];
}]
请将此 link http://qiita.com/to_obara/items/e386040abcc93842745b 用于 swift 代码。我已经按照上面的 link.
编写了下面的 objective 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]];
}
}];
}
//
}
}];
}
}