我一直在逐渐了解过滤器,但是我不能让我的生活得到实现,并且关于这个特定过滤器的文章很少。
我有一个蒙版(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
我一直在玩不同的方法,但所有人都给出了相同的错误,我认为它与面具类型有关?...我不知道!
答案 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!)
}