使用Swift和Core Image保存具有正确方向的图像

3
我正在使用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个回答

2

不使用writeImageToSavedPhotosAlbummetadata版本,可以使用以下方式:

library.writeImageToSavedPhotosAlbum(
                cgimg,
                orientation: orientation,
                completionBlock:nil)

那么您可以直接传入方向。

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

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

根据我在这里的不太确定的回答。(正如您所确认的那样,这个解决方案确实适用于Swift - 我从工作的Objective-C代码中推导出来的,但未经测试)。
如果您有兴趣从图像元数据中操作其他信息,以下是我对其他问题提供的一些相关答案... 更新UIImage方向元数据?
强制UIImagePickerController在iOS中以纵向方向/尺寸拍照
如何在Cocoa中获取图像作者
从(到)“选取”的图像获取URL,iOS 还有一个在github上的小型测试项目,可以从各种来源挖掘图像元数据(它是objective-C,但原理相同)。

ALAssetsLibrary()is deprecated in iOS 9, now you have to use PHPhotoLibrary - Carlos.V

1
你正在调用writeImageToSavedPhotosAlbum:metadata:completionBlock:...该方法的文档中写道:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接