在UIImagePickerController中,是否可以获取UIImagePickerControllerMediaURL的NSURL值?

时间:2010-02-17 12:23:04

标签: iphone

当用户从选择器控制器中选择一个图像时,我正在调用该委托:

(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

在字典信息中,键UIImagePickerControllerMediaURL的值为NULL。我在这里错过了什么吗?

5 个答案:

答案 0 :(得分:5)

我知道这个问题非常古老,但我确实设法从最近的谷歌搜索中徘徊,所以我想我会想到我认为实际上是你的问题的答案,其他答案似乎都错过了。

您为UIImagePickerControllerMediaURL获取NULL,因为它仅在选择器中为Movie(kUTTypeMovie)媒体类型返回。如果您在创建默认选择器时没有指定其他媒体类型,那么文档似乎意味着您将无法获得它:

  

UIImagePickerControllerMediaURL - Specifies the filesystem URL for the movie.

我可以确认至少在iOS 6中为图像(而非电影)进行的快速测试中没有返回。

要访问返回的图像,您实际上可以在UIImagePickerControllerOriginalImage(如果不允许编辑,默认设置)或UIImagePickerControllerEditedImage的键下直接访问UIImage对象,如果在选择器中允许编辑。即使在选取器中进行了编辑,原始图像也始终可用。您可以像处理程序中的任何其他UIImage一样对待这些UIImage。

答案 1 :(得分:3)

您可以获得该对象的NSURL路径,但这并不是您所期望的。我似乎也无法访问文件中的数据。

- (void)imagePickerController:(UIImagePickerController *)imagepicker didFinishPickingMediaWithInfo:(NSDictionary *)info {
     // dismiss the image picker modal
     [[imagepicker parentViewController] dismissModalViewControllerAnimated:YES];
     // grab the image url
     NSURL *imageURL = [info valueForKey: UIImagePickerControllerReferenceURL];
     // get the data from the url
     NSData *data = [NSData dataWithContentsOfURL:imageURL];
     // data is null at this point
 }

对于jpeg文件,NSURL看起来类似于以下内容。

  

资产库://asset/asset.JPG ID = 1000000246&安培; EXT = JPG

答案 2 :(得分:0)

是的,元数据没有填充在回调中(有些人还期望拍摄照片的地方的地理标记/位置,但事实并非如此)。 从Apple的角度来看,你没有获得NSURL听起来是合乎逻辑的:他们不会给你真实文件的路径(比如file:// ....),因为这被认为是实现的一部分,而不是公共API的一部分:从客户端的角度来看,如果苹果公司不希望您知道图片在文件系统中的实际存储位置,那就好像。

答案 3 :(得分:0)

在iPad上运行iOS 3.2.1,似乎我的应用程序能够通过UIImagePickerControllerMediaURL获取图像文件的文件URL,即使文档似乎说它只适用于电影文件。 / p>

答案 4 :(得分:0)

以下链接对我有所帮助。 display image from URL retrieved from ALAsset in iPhone

UIImagePickerControllerReferenceURL返回资产库网址。您需要使用ALAssetLibrary对象来访问图像。该链接描述了如何执行此操作。