使用过滤器 - CIMaskedVariableBlur

时间:2017-09-07 12:02:49

标签: swift3 core-image cifilter

我一直在逐渐了解过滤器,但是我不能让我的生活得到实现,并且关于这个特定过滤器的文章很少。

我有一个蒙版(png),白色和黑色之间有一个渐变和一个图像,我无法模糊一个名为bg.png的图像。该应用程序崩溃了:

  

' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]:此类与键inputMaskImage不符合键值编码。'

let mask = CIImage(image: UIImage(named: "mask.png")!)
let context = CIContext()
let filter = CIFilter(name: "CIMaskedVariableBlur")
filter?.setValue(mask, forKey: kCIInputMaskImageKey)
let image = CIImage(image: UIImage(named: "bg.png")!)
filter?.setValue(image, forKey: kCIInputImageKey)
let result = filter?.outputImage!
let cgImage = context.createCGImage(result!, from:(result?.extent)!)
let outputImg = UIImage(cgImage: cgImage!)
bgImage.image = outputImg

我一直在玩不同的方法,但所有人都给出了相同的错误,我认为它与面具类型有关?...我不知道!

1 个答案:

答案 0 :(得分:2)

如果您定位的是iOS 8,则密钥kCIInputMaskImageKey无法正常工作。它仅适用于iOS 9或更高版本。但好消息是,通过输入密钥的名称,可以让iOS 8中的内容正常工作。无论如何我通常会这样做。这是一个适合您的功能:

func applyMaskedVariableBlur(image:UIImage, mask:UIImage) -> UIImage {

    let filter = CIFilter(name: "CIMaskedVariableBlur")

    // convert UIImages to CIImages and set as input

    let ciInput = CIImage(image: image)
    let ciMask = CIImage(image: mask)
    filter?.setValue(ciInput, forKey: "inputImage")
    filter?.setValue(ciMask, forKey: "inputMask")

    // get output CIImage, render as CGImage first to retain proper UIImage scale

    let ciOutput = filter?.outputImage
    let ciContext = CIContext()
    let cgImage = ciContext.createCGImage(ciOutput!, from: (ciOutput?.extent)!)

    return UIImage(cgImage: cgImage!)
}