ios swift exif

ios - Cómo escribir datos Exif a la imagen en Swift



(2)

Estoy intentando escribir datos EXIF ​​en la imagen, pero CGImageDestinationFinalize se bloquea:

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] 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)


Esto podría ser de su definición de destino.

Esto funciono para mi

(...) 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 }


Por favor, compruebe esto debajo de la respuesta. tienes un error debido a un valor nulo en EXIFDictionary y 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)