以正确的方向保存图像 - 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.
您可以使用 :
而不是 writeImageToSavedPhotosAlbum
的 metadata
版本
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,但原理是一样的)。
我在 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.
您可以使用 :
而不是writeImageToSavedPhotosAlbum
的 metadata
版本
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,但原理是一样的)。