应用CIFilter后无论我做什么,图像都变大了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用CIFilter后无论我做什么,图像都变大了相关的知识,希望对你有一定的参考价值。
我阅读了有关将CIFilter应用于UIImage并将其显示回来的最新知识。但是我仍然比原来的图像更大,不知道为什么。也许我错过了一些缩放因子?
这是我的屏幕,带有简单的UIImageView和一些图像。唯一的约束是超级视图的中心X / Y.
应用过滤器前的截图
但是我在viewDidLoad()
中添加了这段代码:
let ciContext = CIContext(options: nil)
let coreImage = CIImage(image: ledImageView.image!)
let filter = CIFilter(name: "CIExposureAdjust")
filter!.setValue(coreImage, forKey: kCIInputImageKey)
filter!.setValue(1.5, forKey: kCIInputEVKey)
let filteredImageData = filter?.outputImage as! CIImage
let filteredImageRef = ciContext.createCGImage(filteredImageData, from: filteredImageData.extent)
ledImageView.image = UIImage(cgImage: filteredImageRef!)
我得到的结果不是预期的(是的,应用过滤器但是大小已经破坏)。我做错了什么?
应用过滤器后的截图
答案
真奇怪,
输入和输出图像的扩展值是什么?他们匹配吗?
你可以试试这个
// crop the output image to the input's image extend
let croppedImage = filteredImageData.cropped(to: coreImage.extent)
let result = UIImage(ciImage: croppedImage)
另一答案
我找到了问题的根本原因和解决方案。显然最终的UIImage缺乏scale
和imageOrientation
。原始(源)图像具有比例== 3.0,而处理后的图像保持比例== 1.0。
以下是适当的源代码:
let ciContext = CIContext(options: nil)
let coreImage = CIImage(image: sourceImageView.image!)
let srcScale = sourceImageView.image.scale // <-- keep this value
let srcOrientation = sourceImageView.image.imageOrientation // <-- keep that value
let filter = CIFilter(name: "CIExposureAdjust")
filter!.setValue(coreImage, forKey: kCIInputImageKey)
filter!.setValue(1.5, forKey: kCIInputEVKey)
let filteredImageData = filter?.outputImage as! CIImage
let filteredImageRef = ciContext.createCGImage(filteredImageData, from: filteredImageData.extent)
// use this constructor with scale/orientation values
ledImageView.image = UIImage(cgImage: filteredImageRef!, scale: srcScale: orientation: srcOrientation)
现在结果如下:)
以上是关于应用CIFilter后无论我做什么,图像都变大了的主要内容,如果未能解决你的问题,请参考以下文章