我正在通过PhotoKit编辑照片,但我发现这不会保留原始照片的元数据.即使Apple应用Sepia或Chrome过滤器时提供的SamplePhotosApp也会出现这种情况.我的问题是,您如何确保保留所有原始照片元数据?
我已经发现了如何获取原始图像的元数据,并且我能够将该元数据保存到CIImage
我创建的最终元数据中,但是在提交编辑时它仍然被删除.我将转换CIImage
为a CGImage
转换为UIImage
to NSData
,或者我将其写入磁盘的方式一定存在问题.
asset.requestContentEditingInputWithOptions(options) { (input: PHContentEditingInput!, _) -> Void in //Get full image let url = input.fullSizeImageURL let orientation = self.input.fullSizeImageOrientation var inputImage = CIImage(contentsOfURL: url) inputImage = inputImage.imageByApplyingOrientation(orientation) //do some processing on original photo here and create a CGImage... //save the original photo's metadata to a new CIImage: let originalMetadata = inputImage.properties() let newImage = CIImage(CGImage: editedCGImage, options: [kCIImageProperties: originalMetadata]) println(newImage.properties()) //correctly prints all metadata! //commit changes to disk - somewhere after this line the metadata is lost let eaglContext = EAGLContext(API: .OpenGLES2) let ciContext = CIContext(EAGLContext: eaglContext) let outputImageRef = ciContext.createCGImage(newImage, fromRect: newImage.extent()) let uiImage = UIImage(CGImage: outputImageRef, scale: 1.0, orientation: UIImageOrientation.Up) let jpegNSData = UIImageJPEGRepresentation(uiImage, 0.75) let contentEditingOutput = PHContentEditingOutput(contentEditingInput: input) let success = jpegData.writeToURL(contentEditingOutput.renderedContentURL, options: NSDataWritingOptions.AtomicWrite, error: _) PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in let request = PHAssetChangeRequest(forAsset: asset) request.contentEditingOutput = contentEditingOutput }, completionHandler: { (success: Bool, error: NSError!) -> Void in if success == false { println('failed to commit image edit: \(error)') } }) })
原始 - 请注意GPS标签:
编辑照片后: