以正确的方向保存图像 - Swift&核心形象

时间:2015-03-03 22:17:07

标签: ios swift uiimage core-image photo-gallery

我在 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)
}

2 个答案:

答案 0 :(得分:2)

您可以使用:

,而不是使用metadata版本的writeImageToSavedPhotosAlbum
library.writeImageToSavedPhotosAlbum(
                cgimg,
                orientation: orientation,
                completionBlock:nil)

然后你可以直接传递方向。

要满足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从各种来源挖掘图像元数据(它的目标-C,但原则是相同的)。

答案 1 :(得分:1)

您正在呼叫writeImageToSavedPhotosAlbum:metadata:completionBlock: ...该方法的docs说:

  

您必须在元数据字典中指定方向键以保留图像的方向。