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 } }) }