我正在尝试在imagePickerController中打印所有图像元数据:didFinishPickingMediaWithInfo函数。当我使用info.objectForKey(UIImagePickerControllerReferenceURL)
方法时,它返回nil,如果尝试使用此结果,我的应用程序崩溃。有谁知道为什么它会返回nil以及我在选择图像时还能用什么来打印所有图像元数据? (使用UIImageJPEGRepresentation不是一个选项,因为删除了EXIF数据)。
这是我的代码:
func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: NSDictionary!)
{
let image = info.objectForKey(UIImagePickerControllerOriginalImage) as UIImage
let refURL : NSURL = info.objectForKey(UIImagePickerControllerReferenceURL) as NSURL
var localSourceRef: CGImageSourceRef = CGImageSourceCreateWithURL(refURL, nil)
var localMetadata: NSDictionary = CGImageSourceCopyPropertiesAtIndex(localSourceRef, 0, nil)
println("\n Photo data: \n")
println(localMetadata)
}
答案 0 :(得分:2)
所以听起来这里实际上有两个问题:
1)为什么UIImagePickerControllerReferenceURL返回一个nil引用?
2)如何从照片中获取位置数据?
所以,(1)的答案通常是因为你在操作系统之前收到回调didFinishPickingMedia,因为它将文件写入图像库。
#2的答案要复杂得多,正如这个问题的答案所展示的那样: Reading the GPS data from the image returned by the camera in iOS iphone
您需要考虑许多变量:
根据这个答案:https://stackoverflow.com/a/10338012/490180你应该能够检索原始UIImage,然后从UIImage的CGImage的data属性创建CGImageSourceRef。这有效地消除了您访问ReferenceURL的需要。