从带有数据的照片库中打开 UIImage
Posted
技术标签:
【中文标题】从带有数据的照片库中打开 UIImage【英文标题】:Open UIImage from photo library with data 【发布时间】:2013-02-01 01:47:21 【问题描述】:我有两个视图控制器,其中一个我从照片库中选择图像并将其分配给图像属性。使用这个选择器:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo
但是我想从第一个控制器中的选择器中获取图像的地址/数据,推送下一个视图控制器,然后在那里打开具有该地址的图像。那么我执行以下操作:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
当我打印照片的信息时,它看起来像这样:
assets-library://asset/asset.JPG?id=52219875-C221-4F60-B9D4-984AAADB6E63&ext=JPG
问题是 UIImage 有方法 initWithData
或 imageWithData
但这些接受 NSData 而不是 NSDictionary。
如何使用照片库中的数据打开图像?
【问题讨论】:
【参考方案1】:这个方法:
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)img
editingInfo:(NSDictionary *)editInfo
不应使用,自 ios3 起已弃用
这个方法:
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
在您报告时返回字典。
图像指针是此字典中的对象之一。您可以这样获得它:
UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
【讨论】:
他不想要图片,他要了 URL,应该在不同的视图控制器中使用。【参考方案2】:这是该方法的Apple's documentation。
那个字典里基本上有几个键,听here:
NSString *const UIImagePickerControllerMediaType;
NSString *const UIImagePickerControllerOriginalImage;
NSString *const UIImagePickerControllerEditedImage;
NSString *const UIImagePickerControllerCropRect;
NSString *const UIImagePickerControllerMediaURL;
NSString *const UIImagePickerControllerReferenceURL;
NSString *const UIImagePickerControllerMediaMetadata;
你可能想要UIImagePickerControllerEditedImage
。所以这就是你要找的东西:
UIImage *theImage = [info valueForKey:UIImagePickerControllerEditedImage];
当然,您也可以使用字典中的其他键从图像中获取其他信息。
【讨论】:
不是,他在找什么。他想传递地址,而不是图像。【参考方案3】:字典提供图像的 URL。 所以通过
加载数据NSData *imageData = [NSData dataWithContentsOfURL:[info valueForKey: UIImagePickerControllerReferenceURL]];
并将此数据用于NSImage initWithData
方法。
【讨论】:
以上是关于从带有数据的照片库中打开 UIImage的主要内容,如果未能解决你的问题,请参考以下文章