2010-11-30 20 views
23

我在iPhone应用程序中从照片库中选择图像。我将如何检索实际的图像名称。我怎样才能得到通过iPhone中的照片库采摘的图像的名称?

在.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。请帮帮我。

在此先感谢。

+0

看到此链接 http://stackoverflow.com/questions/5864814/uiimagepickercontroller-get-the-name-of-the -image-selected-from-photo-library – PRASAD1240 2013-03-29 09:08:33

+0

http://stackoverflow.com/questions/5864814/uiimagepickercontroller-get-the-name-of-the-image-selected-from-photo-library – PRASAD1240 2013-03-29 09:47:01

+0

@ PRASAD1240你为什么要发布问题后面提问的链接?请至少检查问题日期。 – 2016-10-19 08:01:39

回答

67

进口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。框架 步骤:

  1. 在项目导航,选择项目
  2. 选择目标
  3. 选择“构建阶段”选项卡
  4. 打开“链接二进制与图书馆”扩展
  5. 点击'+'按钮
  6. 选择您的框架
  7. (可选)将添加的框架拖放到“框架”组中

来源: http://www.raywenderlich.com/forums/viewtopic.php?f=2&p=34901 & How to "add existing frameworks" in Xcode 4?

+2

这在我看来是最好的答案。 – 2013-05-16 20:36:30

+1

比接受的答案更好,但即使对于Safari下载的图像,图像名称仍然类似于“IMG_1754.JPG”。但是,这看起来是这样的,Image Capture显示了相同的名称。 – 2014-05-03 20:57:22

+1

iOS 9中的弃用警告。Equiavlent是fetchAssestsWithLocalIdentifiers:选项 – 2015-10-14 09:21:37

2

虽然您可能能够检索最后一个路径组件并将其用作文件名,但建议您不要这样做。这些文件名由系统分配给iTunes,以便在同步时理解,并且不适合程序员访问,因为他们可能会在未来的同步中被其他图像替换。

对此的一个好处是将当前日期指定为文件名,同时保存到从库中选取的图像。您可以将其保存在文档或库目录中,并使用映射PList文件将图像映射到其文件名。

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

4

简单迅速实施:

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

7

如果您正在为iOS的9+目标,你会看到使用ALAssetsLibrary的一堆弃用警告,即:

'assetForURL(_:resultBlock:failureBlock :)' 被弃用的iOS 9.0:使用fetchAssetsWithLocalIdentifiers:选择:对PHAsset本地标识符(获取资产或由先前已知的ALAssetPropertyAssetURL使用fetchAssetsWithALAssetURLs查找PHAssets :options :)而不是

正如警告所述,您应该使用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”。

3

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

然后,在你imagePickerController功能 添加以下内容从照片库中获取图像的文件名

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

Objective C实施方案iOS 10。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: %f x height: %f",imageName, photo.size.width, photo.size.height); 

    [picker dismissViewControllerAnimated:YES completion:nil]; 
} 
0
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    let imageUrl   = info[UIImagePickerControllerReferenceURL] as! NSURL 
    let imageName   = imageUrl.lastPathComponent 
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! 
    let photoURL   = NSURL(fileURLWithPath: documentDirectory) 
    let localPath   = photoURL.appendingPathComponent(imageName!) 
    let image    = info[UIImagePickerControllerOriginalImage]as! UIImage 
    let data    = UIImagePNGRepresentation(image) 

    do 
    { 
     try data?.write(to: localPath!, options: Data.WritingOptions.atomic) 
    } 
    catch 
    { 
     // Catch exception here and act accordingly 
    } 

    self.dismiss(animated: true, completion: nil); 
} 
相关问题