I am trying to add metadata to my synthetic form and save it in a movie using the framework. I got saving and editing, but I just can figure out how to add metadata. I tried many approaches such as adding metadata, creating an image of CoreGraphics (see code below). All these approaches do not give me errors, but I just donβt see the metadata when I open the image on my Mac.
Can someone point me in the right direction?
PHPhotoLibrary.sharedPhotoLibrary().performChanges({ let assets : PHFetchResult = PHAsset.fetchAssetsWithLocalIdentifiers([self.localIdentifier], options: nil); let asset : PHAsset = assets[0] as! PHAsset; let changeRequest = PHAssetChangeRequest(forAsset: asset); changeRequest.location = self.currentLocation; asset.requestContentEditingInputWithOptions(nil, completionHandler: { (input: PHContentEditingInput?, info: [NSObject : AnyObject]) -> Void in guard let input = input else { return } let imageManager : PHImageManager = PHImageManager(); let requestoptions : PHImageRequestOptions = PHImageRequestOptions(); requestoptions.resizeMode = PHImageRequestOptionsResizeMode.None; imageManager.requestImageForAsset(asset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.Default, options: PHImageRequestOptions(), resultHandler: { (let image : UIImage?, _) -> Void in let output : PHContentEditingOutput = PHContentEditingOutput(contentEditingInput: input); PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in let changeRequest = PHAssetChangeRequest(forAsset: asset); /* Neu */ let imageData : NSData = NSData(contentsOfURL: (input.fullSizeImageURL)!)!; let image : CIImage = CIImage(data: imageData)!; let dataPtr = CFDataCreate(kCFAllocatorDefault, UnsafePointer<UInt8>(imageData.bytes), imageData.length) // Save off the properties let imageSource : CGImageSourceRef = CGImageSourceCreateWithData(dataPtr, nil)!; var metadata : NSMutableDictionary = NSMutableDictionary(dictionary: CGImageSourceCopyProperties(imageSource, nil)!); /* Add some values to metadata */ .... NSLog("New metadata: %@", metadata); // Save the image let outputImageSource : CGImageSourceRef = CGImageSourceCreateWithData(dataPtr, nil)!; let jpegData : CFMutableDataRef = CFDataCreateMutable(kCFAllocatorDefault, 0); let outputDestination : CGImageDestinationRef = CGImageDestinationCreateWithData(jpegData, CGImageSourceGetType(outputImageSource)!, 1, nil)!; // add the image data to the destination CGImageDestinationAddImageFromSource(outputDestination, outputImageSource, 0, metadata); if CGImageDestinationFinalize(outputDestination) { NSLog("Successful image creation."); // process the image rendering, adjustment data creation and finalize the asset edit. } else { NSLog("Image creation failed."); } (jpegData as NSData).writeToURL(output.renderedContentURL, atomically: true); let options : String = NSString(format: "%f|%f|%f|%f|%f|%f", self.saturationSlider.value, self.warmthSlider.value, self.brightnessSlider.value, self.sharpnessSlider.value, self.contrastSlider.value, self.gammaSlider.value ) as String; let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]; output.adjustmentData = PHAdjustmentData(formatIdentifier: NSBundle.mainBundle().bundleIdentifier!, formatVersion: nsObject as! String, data: options.dataUsingEncoding(NSUTF8StringEncoding)!); changeRequest.contentEditingOutput = output; }, completionHandler: { (_bool, _error) -> Void in if !_bool && error != nil { NSLog("%@", error!); } }); }); }); }, completionHandler: { (_bool, _error) -> Void in });