【发布时间】:2017-01-15 20:58:38
【问题描述】:
我正在努力在 iOS 10 中添加对广色域照片的支持。当用户从相机中拍照时,我需要使用支持新色彩空间的新 API 来保存照片数据 - UIGraphicsImageRenderer' s jpegData 而不是 UIImageJPEGRepresentation。
我在图像方向方面遇到了一些问题。在我的 iPad 上以纵向拍摄照片,图像未正确绘制。请参阅下面的 cmets:
旧 API:
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let imageData = UIImageJPEGRepresentation(image, 1)
新 API:
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let cgImage = image.cgImage!
let ciImage = CIImage(cgImage: cgImage)
let format = UIGraphicsImageRendererFormat()
format.scale = 1
format.prefersExtendedRange = true
let renderer = UIGraphicsImageRenderer(bounds: ciImage.extent, format: format)
let imageData = renderer.jpegData(withCompressionQuality: 1, actions: { context in
context.cgContext.draw(cgImage, in: ciImage.extent) //draws flipped horizontally
//image.draw(at: .zero) //draws rotated 90 degrees leaving black at bottom
//image.draw(in: ciImage.extent) //draws rotated 90 degrees stretching and compressing the image to fill the rect
})
用UIGraphicsImageRenderer的jpegData替换UIImageJPEGRepresentation的正确方法是什么?
【问题讨论】:
-
这真的是您使用的所有代码吗?
image.draw方法应该“在当前图形上下文中绘制整个图像,尊重图像的方向设置”。根据我的经验,在使用渲染器时,非向上方向的输入图像总是会被重新渲染为向上方向的图像数据,而无需额外的坐标变换。
标签: ios uikit cgcontext cgcontextdrawimage