应用CIFilter后无论我做什么,图像都变大了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用CIFilter后无论我做什么,图像都变大了相关的知识,希望对你有一定的参考价值。

我阅读了有关将CIFilter应用于UIImage并将其显示回来的最新知识。但是我仍然比原来的图像更大,不知道为什么。也许我错过了一些缩放因子?

这是我的屏幕,带有简单的UIImageView和一些图像。唯一的约束是超级视图的中心X / Y.

应用过滤器前的截图

enter image description here

但是我在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!)

我得到的结果不是预期的(是的,应用过滤器但是大小已经破坏)。我做错了什么?

应用过滤器后的截图

enter image description here

答案

真奇怪,

输入和输出图像的扩展值是什么?他们匹配吗?

你可以试试这个

// crop the output image to the input's image extend
let croppedImage = filteredImageData.cropped(to: coreImage.extent)
let result = UIImage(ciImage: croppedImage)
另一答案

我找到了问题的根本原因和解决方案。显然最终的UIImage缺乏scaleimageOrientation。原始(源)图像具有比例== 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)

现在结果如下:)

Fixed image on ViewController

以上是关于应用CIFilter后无论我做什么,图像都变大了的主要内容,如果未能解决你的问题,请参考以下文章

应用 CIFilter 后图像旋转

PPT突然字间距变大是啥原因

imageWithData图像尺寸变大了?

为啥我不能在我的 Swift iOS 应用程序中使用 CIFilter 将我的图像反转回原始图像

css 中的class是啥意思!

Swift核心图像对没有CIFilter的图像应用锐化