iOS Swift. 如何从只有UIImage(NSURL)中获取GPS元数据?

3

只有NSURL引用的图像如何获取GPS元数据?

当然,我可以从NSURL加载UIImage,但接下来呢?

我在这里找到的大多数答案都涉及UIImagePicker和使用ALAssets,但我没有这样的选项。

2个回答

8
回答自己的问题。获取GPS元数据的内存有效且快速的方法是:
let options = [kCGImageSourceShouldCache as String: kCFBooleanFalse]
if let data = NSData(contentsOfURL: url), imgSrc = CGImageSourceCreateWithData(data, options) {
    let metadata = CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options) as Dictionary
    let gpsData = metadata[kCGImagePropertyGPSDictionary] as? [String : AnyObject]
}

第二个选项是:
if let img = CIImage(contentsOfURL: url), metadata = img.properties(), 
gpsData = metadata[kCGImagePropertyGPSDictionary] as? [String : AnyObject] {  }

在Swift中看起来更美观,但会使用更多的内存(通过Profiler测试)。


1

Swift 3 的更新版本:

let options = [kCGImageSourceShouldCache as String: kCFBooleanFalse]
if let data = NSData(contentsOfURL: url), let imgSrc = CGImageSourceCreateWithData(data, options as CFDictionary) {
    let metadata = CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options as CFDictionary) as? [String : AnyObject]
    if let gpsData = metadata?[kCGImagePropertyGPSDictionary as String] {
        //do interesting stuff here
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接