How to write Exif data to image in Swift with lat long How to write Exif data to image in Swift with lat long swift swift

How to write Exif data to image in Swift with lat long


Please check this below answer.you got error due to nil value on EXIFDictionary and GPSDictionary

 var image = info[UIImagePickerControllerOriginalImage] as! UIImage let jpeg = UIImageJPEGRepresentation(image, 1.0) var source: CGImageSource? = nil source = CGImageSourceCreateWithData((jpeg as CFData?)!, nil) let metadata = CGImageSourceCopyPropertiesAtIndex(source!, 0, nil) as? [AnyHashable: Any] var metadataAsMutable = metadata var EXIFDictionary = (metadataAsMutable?[(kCGImagePropertyExifDictionary as String)]) as? [AnyHashable: Any] var GPSDictionary = (metadataAsMutable?[(kCGImagePropertyGPSDictionary as String)]) as? [AnyHashable: Any] if !(EXIFDictionary != nil) {       EXIFDictionary = [AnyHashable: Any]()    }  if !(GPSDictionary != nil) {       GPSDictionary = [AnyHashable: Any]()   }   GPSDictionary![(kCGImagePropertyGPSLatitude as String)] = 30.21313   GPSDictionary![(kCGImagePropertyGPSLongitude as String)] = 76.22346   EXIFDictionary![(kCGImagePropertyExifUserComment as String)] = "Hello Image"   let UTI: CFString = CGImageSourceGetType(source!)!   let dest_data = NSMutableData()   let destination: CGImageDestination = CGImageDestinationCreateWithData(dest_data as CFMutableData, UTI, 1, nil)!   CGImageDestinationAddImageFromSource(destination, source!, 0, (metadataAsMutable as CFDictionary?))            CGImageDestinationFinalize(destination)


This could be from your destination definition.

This worked for me

(...)    let source                  =   CGImageSourceCreateWithData(jpgData as CFData, nil)    let finalData               =   NSMutableData()    let destination             =   getDestination(finalData:finalData, source:source!)(...)// Note that :// NSMutableData type variable will be cast to CFMutableData// fileprivate func getDestination(finalData:CFMutableData, source:CGImageSource)->CGImageDestination?{    guard let destination = CGImageDestinationCreateWithData(finalData,                                                             CGImageSourceGetType(source)!,                                                             1,                                                             nil)else{return nil}    return destination}