PHPhotoLibrary 获取相册和照片信息
Posted
技术标签:
【中文标题】PHPhotoLibrary 获取相册和照片信息【英文标题】:PHPhotoLibrary getting album and photo info 【发布时间】:2016-01-20 16:55:34 【问题描述】:我正在尝试使用 phphotoLibrary 获取有关所有相册/照片的信息。我几乎不了解目标 C,并且我查看了一些教程/示例,但找不到我需要的所有内容。
这是我的代码所基于的示例代码的链接。 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。
【问题讨论】:
您能展示一下您迄今为止尝试过的内容以及遇到问题的地方吗? 【参考方案1】:我找到了一种获取照片网址的方法。
-(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;
];
【讨论】:
这会为您提供资产的 一个 URL,该 URL 在您开始(和放弃)的编辑会话期间有效。但它不一定是原始图像文件的 URL,也不一定是在以后的编辑中保持不变的 URL,甚至不是对用户有意义的东西。【参考方案2】:照片库中的文件名是一个实现细节,可能会发生变化。有各种私有 API 可用于发现它们(或使用 valueForKey
或其他公共自省 API 来查找隐藏位置的方法),它们不是可以依赖的东西。特别是,已编辑的资产可能具有与原始文件不同的文件名。
您需要文件名/URL 做什么?如果您只是在启动应用程序时唯一标识资产,请使用localIdentifier
。如果你向用户展示它......为什么?像 IMG_0234.jpg 和 IMG_5672.jpg 这样的东西对普通用户来说意义不大。
要获取特定专辑中的资产,请使用fetchAssetsInAssetCollection:options:
。要获取包含特定资产的专辑,请使用fetchAssetCollectionsContainingAsset:withType:options:
。要发现专辑列表,请使用 PHAssetCollection
及其超类 PHCollection
上的其他 API。
【讨论】:
以上是关于PHPhotoLibrary 获取相册和照片信息的主要内容,如果未能解决你的问题,请参考以下文章