以正确的方向保存图像 - Swift & Core Image

Save image with the correct orientation - Swift & Core Image

我在 Swift 中使用 Core Image 编辑照片,但在保存照片时出现问题.我没有以正确的 方向 保存它。 当我从 照片库 获取图片时,我将方向保存在一个变量中作为 UIImageOrientation 但我不知道如何在将编辑后的照片保存到照片库之前将其设置回去.有什么想法吗?

保存方向:

var orientation: UIImageOrientation = .Up
orientation = gotImage.imageOrientation

将编辑后的照片保存到照片库:

@IBAction func savePhoto(sender: UIBarButtonItem) {
    let originalImageSize = CIImage(image:gotImage)
    filter.setValue(originalImageSize, forKey: kCIInputImageKey)
    // 1
    let imageToSave = filter.outputImage

    // 2
    let softwareContext = CIContext(options:[kCIContextUseSoftwareRenderer: true])

    // 3
    let cgimg = softwareContext.createCGImage(imageToSave, fromRect:imageToSave.extent())

    // 4
    let library = ALAssetsLibrary()
    library.writeImageToSavedPhotosAlbum(cgimg,
        metadata:imageToSave.properties(),
        completionBlock:nil)
}

您正在调用 writeImageToSavedPhotosAlbum:metadata:completionBlock:... 该方法的 docs 说:

You must specify the orientation key in the metadata dictionary to preserve the orientation of the image.

您可以使用 :

而不是 writeImageToSavedPhotosAlbummetadata 版本
library.writeImageToSavedPhotosAlbum(
                cgimg,
                orientation: orientation,
                completionBlock:nil)

那你就可以直接传入orientation了

要满足Swift,您可能需要先进行类型转换:

var orientation : ALAssetOrientation = ALAssetOrientation(rawValue:           
                                    gotImage.imageOrientation.rawValue)!

根据我有些不确定的回答 here

(如您所确认,此解决方案确实在 Swift 中有效 - 我未经测试从工作的 Objective-C 代码中派生了它)

如果您对从图像元数据中处理其他信息感兴趣,这里是我为其他问题提供的一些相关答案...

Updating UIImage orientation metaData?
Force UIImagePickerController to take photo in portrait orientation/dimensions iOS
How to get author of image in cocoa
Getting a URL from (to) a "picked" image, iOS

还有一个small test project on github从各种来源中挖掘出图像元数据(它是objective-C,但原理是一样的)。