我在 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)
}
答案 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说:
您必须在元数据字典中指定方向键以保留图像的方向。