2016-01-20 95 views
1

我想使用PHPhotoLibrary获取所有专辑/照片的信息。我几乎不知道客观的C,我看过一些教程/示例,但找不到我需要的所有东西。PHPhotoLibrary获取专辑和照片信息

这里是我基于我的代码的示例代码的链接。 https://developer.apple.com/library/ios/samplecode/UsingPhotosFramework/Introduction/Intro.html#//apple_ref/doc/uid/TP40014575-Intro-DontLinkElementID_2

到目前为止,我能够获得专辑名称和标识符。我得到一张照片列表,我也可以得到他们的标识符,但不是文件名。但是如果我在我的功能中放置一个断点并查看我的PHAsset指针值,我可以在里面看到文件名(在_filename中),但是如果我尝试调用其中包含文件名的变量,则该变量不存在。

所以,如果任何人都可以提供示例代码来获取相册/照片/缩略图上的所有信息,那就太棒了。或者只是获得文件名将是一个很好的帮助。

这是到目前为止,我已经试过代码:

-(void)awakeFromNib{ 
    NSMutableArray *allPhotos = self.getAllPhotos; 
    for (int x = 0; x < allPhotos.count; x ++) 
    { 
     PHAsset *photo = [self getPhotoAtIndex:x]; 
     PHAssetSourceType source = photo.sourceType; 
     NSString *id = photo.localIdentifier; 
     NSString *description = photo.description; 
     NSUInteger height = photo.pixelHeight; 
     NSUInteger width = photo.pixelWidth; 
     NSLog(@"Test photo info"); 
    } 
} 

-(PHAsset*) getPhotoAtIndex:(NSInteger) index 
{ 
    return [self.getAllPhotos objectAtIndex:index]; 
} 

-(NSMutableArray *) getAllPhotos 
{ 
    NSMutableArray *photos = [[NSMutableArray alloc] init]; 
    PHFetchOptions *allPhotosOptions = [[PHFetchOptions alloc] init]; 
    allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; 
    PHFetchResult *allPhotos = [PHAsset fetchAssetsWithOptions:allPhotosOptions]; 
    PHFetchResult *fetchResult = @[allPhotos][0]; 

    for (int x = 0; x < fetchResult.count; x ++) { 

     PHAsset *asset = fetchResult[x]; 
     photos[x] = asset; 
    } 

    return photos; 
} 

正如你看到的,我可以得到图像的高度和宽度,它的ID,但无法获得url到它。

+0

你可以展示你到目前为止试过的东西以及你遇到麻烦的地方吗? – JaredH

回答

0

我找到了一种方法来获得我的照片的网址。

-(void)getImageURL:(PHAsset*) asset 
{  
    PHContentEditingInputRequestOptions *options = [[PHContentEditingInputRequestOptions alloc] init]; 
    [options setCanHandleAdjustmentData:^BOOL(PHAdjustmentData *adjustmentData) { 
     return [adjustmentData.formatIdentifier isEqualToString:AdjustmentFormatIdentifier] && [adjustmentData.formatVersion isEqualToString:@"1.0"]; 
    }]; 
    [asset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) 
    { 
     NSURL* url = contentEditingInput.fullSizeImageURL; 
    }]; 
} 
+0

这会为您的资产获取* a * URL,该URL在您开始(和放弃)的编辑会话期间有效。但它不一定是原始图像文件的URL,也不一定会在未来的编辑中保持不变,甚至对用户来说也是有意义的。 – rickster

0

照片库中的文件名是实施细节并可随时更改。有各种私人API用于发现它们(或使用valueForKey或其他公开内省API来查找它们隐藏的位置的方法),但它们不是可依赖的东西。特别是,编辑过的资产可能与原始资料有不同的文件名。

你需要什么文件名/ URL?如果您只是在启动应用程序时唯一识别资产,请使用localIdentifier。如果你向用户展示它......为什么?像IMG_0234.jpg vs IMG_5672.jpg对普通用户来说意义不大。


要获取特定相册中的资产,请使用fetchAssetsInAssetCollection:options:。要获取包含特定资产的专辑,请使用fetchAssetCollectionsContainingAsset:withType:options:。要发现相册列表,请使用PHAssetCollection及其超类PHCollection上的其他API。