应用 CIFilter 后,无论我做啥,图像都会变大
Posted
技术标签:
【中文标题】应用 CIFilter 后,无论我做啥,图像都会变大【英文标题】:After applying CIFilter image got bigger no matter what I do应用 CIFilter 后,无论我做什么,图像都会变大 【发布时间】:2018-08-30 06:21:20 【问题描述】:我阅读了有关将 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!)
我得到的结果与预期不同(是的,过滤器已应用,但大小已损坏)。我做错了什么?
应用过滤器后的屏幕截图
【问题讨论】:
【参考方案1】:我找到了问题的根本原因和解决方案。显然最终的 UIImage 缺少 scale
和 imageOrientation
。原始(源)图像具有 scale == 3.0,而处理后的图像保持 scale == 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)
现在结果如下:)
Fixed image on ViewController
【讨论】:
【参考方案2】:很奇怪,
输入和输出图像的延伸值是多少?他们匹配吗?
你可以试试这个
// crop the output image to the input's image extend
let croppedImage = filteredImageData.cropped(to: coreImage.extent)
let result = UIImage(ciImage: croppedImage)
【讨论】:
感谢您的帮助!我从 coreImage 和 filteredImageData 打印了 extent 然后我有相同的输出 (0.0, 0.0, 440.0, 393.0). 之后,由于不需要裁剪,因此裁剪不会改变任何内容。 我想我找到了根本原因。我检查了 UIImages 的 scale(原始并从 CIImage 创建)。原版的比例为 3.0,最终的比例为 1.0。 scale 属性是只读的。我该如何解决?以上是关于应用 CIFilter 后,无论我做啥,图像都会变大的主要内容,如果未能解决你的问题,请参考以下文章
无论我做啥,我都会在打印时遇到语法错误。这是下面的代码,我找不到问题所在
无论我做啥,都会在 Node.js 中不断收到“ConfigError:Missing region in config”错误