rshev rshev - 3 months ago 44
Swift Question

iOS Swift. How to get a GPS metadata from just a UIImage (NSURL)?

Have a reference to an image only having its NSURL.
How to get a GPS metadata from it?
Of course, I can load a UIImage from NSURL, but then what?

Majority of answers I've found here is regarding UIImagePicker, and using ALAssets then, but I have no such option.

Answer

Answering my own question. The memory-effective and fast way to get a GPS metadata is

    let options = [kCGImageSourceShouldCache as String: kCFBooleanFalse]
    if let data = NSData(contentsOfURL: url), imgSrc = CGImageSourceCreateWithData(data, options) {
        let metadata = CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options) as Dictionary
        if let gpsData = metadata[kCGImagePropertyGPSDictionary] as? [String : AnyObject]

The second option is

    if let img = CIImage(contentsOfURL: url), metadata = img.properties(), 
        gpsData = metadata[kCGImagePropertyGPSDictionary] as? [String : AnyObject] {

it looks nicer in swift, but uses more memory (tested via Profiler).

Comments