我怎样才能得到通过iPhone中的照片库采摘的图像的名称?

我正在iphone应用程序中从照片库中select一个图像。 我将如何检索实际的图像名称。

在.h类

UIImageView * imageView; UIButton * choosePhotoBtn; 

在.m类

 -(IBAction) getPhoto:(id) sender { UIImagePickerController * picker = [[UIImagePickerController alloc] init]; picker.delegate = self; if((UIButton *) sender == choosePhotoBtn) { picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; } else { picker.sourceType = UIImagePickerControllerSourceTypeCamera; } [self presentModalViewController:picker animated:YES]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [picker dismissModalViewControllerAnimated:YES]; imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; } 

我将如何得到图像的实际名称?

我在iphone新。 请帮帮我。

提前致谢。

在您的文件中导入AssetsLibrary:

 #import <AssetsLibrary/AssetsLibrary.h> 

而且,在- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

 // get the ref url NSURL *refURL = [info valueForKey:UIImagePickerControllerReferenceURL]; // define the block to call when we get the asset based on the url (below) ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *imageAsset) { ALAssetRepresentation *imageRep = [imageAsset defaultRepresentation]; NSLog(@"[imageRep filename] : %@", [imageRep filename]); }; // get the asset library and fetch the asset based on the ref url (pass in block above) ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init]; [assetslibrary assetForURL:refURL resultBlock:resultblock failureBlock:nil]; 

所以你会得到日志中的图像名称。

*不要忘记添加现有的框架:AssetsLibrary.framework步骤:

  1. 在项目导航器中,select您的项目
  2. select你的目标
  3. select“构build阶段”选项卡
  4. 打开“链接二进制文件库”扩展器
  5. 点击“+”button
  6. select你的框架
  7. (可选)将添加的框架拖放到“框架”组中

来源: http : //www.raywenderlich.com/forums/viewtopic.php?f=2&p=34901 & 如何在Xcode 4中“添加现有的框架”?

如果您正在为iOS 9+目标构build,则会看到一些ALAssetsLibrary的弃用警告,即:

在iOS 9.0中不推荐使用'assetForURL(_:resultBlock:failureBlock :)':在PHAsset上使用fetchAssetsWithLocalIdentifiers:options:通过本地标识符获取资产(或者通过之前已知的ALAssetPropertyAssetURL使用fetchAssetsWithALAssetURLs:options :)从Photos框架中查找PHAssets代替

如警告所述,您应该使用PHAsset。 例如,使用swift 2.x,您需要先将import Photos添加到您的文件中。 然后,在didFinishPickingMediaWithInfo UIImagePickerControllerDelegate方法中使用fetchAssetsWithALAssetURLs来获取文件名:

 if let imageURL = info[UIImagePickerControllerReferenceURL] as? NSURL { let result = PHAsset.fetchAssetsWithALAssetURLs([imageURL], options: nil) let filename = result.firstObject?.filename ?? "" } 

这将设置filename名为“IMG_0007.JPG”。

简单的Swift实现:

 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let referenceUrl = info[UIImagePickerControllerReferenceURL] as? NSURL { ALAssetsLibrary().assetForURL(referenceUrl, resultBlock: { asset in let fileName = asset.defaultRepresentation().filename() //do whatever with your file name }, failureBlock: nil) } } } 

记住: import AssetsLibrary

在Objective C中,使用Photos框架并导入Photos / Photos.h

然后,在你的imagePickerController函数中添加以下内容,从图片库中获取图片的文件名

 NSURL *refURL = [info valueForKey:UIImagePickerControllerReferenceURL]; PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[refURL] options:nil]; NSString *filename = [[result firstObject] filename]; 

虽然您可能能够检索最后一个path组件并将其用作文件名,但build议您不要这么做。 这些文件名由系统分配给iTunes,以便在同步时理解,而不是由程序员访问,因为它们在将来的同步中可能会被一些其他图像取代。

一个好的方法就是将当前date分配为文件名,同时保存从图库中选取的图像。 您可以将其保存在文档或库目录中,并使用映射PList文件将图像映射到其文件名。

或者,您也可以指定唯一的数字作为文件名,并使用这些值访问图像。

Swift 3和iOS8 +开始 ,文件名不能再被访问。 它仍然可以通过self.valueForKey(“文件名”),但不完全合法。

但是,我在“iOS8 Photos Framework:如何获取PHAsset的名称(或文件名)” 这个问题中find了这个答案 。 要简短,合法。

iOS 10上运行的Objective C实现。 ALAssetsLibrary似乎被弃用,所以你应该使用PHAsset:

 -(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{ NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL]; PHAsset *phAsset = [[PHAsset fetchAssetsWithALAssetURLs:@[imageURL] options:nil] lastObject]; NSString *imageName = [phAsset valueForKey:@"filename"]; UIImage *photo = [info valueForKey:UIImagePickerControllerOriginalImage]; NSLog(@"Picked image: %@ width: %fx height: %f",imageName, photo.size.width, photo.size.height); [picker dismissViewControllerAnimated:YES completion:nil]; }