iOS8 Photos Framework:如何获取PHAsset的名称(或文件名)?

我试图获得使用PHAssets的图像名称。 但我找不到文件名的元数据或任何获取图像名称的方法。 有没有不同的方式来获取文件名?

如果你想得到IMG_XXX.JPG的图像名称(例如照片中最后一张照片的名字),你可以试试这个:

 PHAsset *asset = nil; PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions]; if (fetchResult != nil && fetchResult.count > 0) { // get last photo from Photos asset = [fetchResult lastObject]; } if (asset) { // get photo info from this asset PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init]; imageRequestOptions.synchronous = YES; [[PHImageManager defaultManager] requestImageDataForAsset:asset options:imageRequestOptions resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { NSLog(@"info = %@", info); if ([info objectForKey:@"PHImageFileURLKey"]) { // path looks like this - // file:///var/mobile/Media/DCIM/###APPLE/IMG_####.JPG NSURL *path = [info objectForKey:@"PHImageFileURLKey"]; } }]; } 

希望能帮助到你。

在Swift中,代码将如下所示

 PHImageManager.defaultManager().requestImageDataForAsset(asset, options: PHImageRequestOptions(), resultHandler: { (imagedata, dataUTI, orientation, info) in if info!.keys.contains(NSString(string: "PHImageFileURLKey")) { let path = info![NSString(string: "PHImageFileURLKey")] as! NSURL } }) 

我知道这个问题已经被回答了,但我想我会提供另一个select:

 extension PHAsset { var originalFilename: String? { var fname:String? if #available(iOS 9.0, *) { let resources = PHAssetResource.assetResourcesForAsset(self) if let resource = resources.first { fname = resource.originalFilename } } if fname == nil { // this is an undocumented workaround that works as of iOS 9.1 fname = self.valueForKey("filename") as? String } return fname } } 

还有一个select是:

 [asset valueForKey:@"filename"] 

这个“合法性”取决于你自己决定。

当你有一个资源的引用url时,最简单的答案与斯威夫特:

 if let asset = PHAsset.fetchAssetsWithALAssetURLs([referenceUrl], options: nil).firstObject as? PHAsset { PHImageManager.defaultManager().requestImageDataForAsset(asset, options: nil, resultHandler: { _, _, _, info in if let fileName = (info?["PHImageFileURLKey"] as? NSURL)?.lastPathComponent { //do sth with file name } }) } 

你真正想要的是localIdentifier这是一个唯一的string,持久地标识对象。

使用此string通过使用以下命令查找对象:

fetchAssetsWithLocalIdentifiers:options:, fetchAssetCollectionsWithLocalIdentifiers:options:, or fetchCollectionListsWithLocalIdentifiers:options: method.

更多信息可以在这里find

SWIFT4:import Photos

 if let asset = PHAsset.fetchAssets(withALAssetURLs: [info[UIImagePickerControllerReferenceURL] as! URL], options: nil).firstObject { PHImageManager.default().requestImageData(for: asset, options: nil, resultHandler: { _, _, _, info in if let fileName = (info?["PHImageFileURLKey"] as? NSURL)?.lastPathComponent { print("///////" + fileName + "////////") //do sth with file name } }) }