2017-09-07 1 views
0

필자는 점차 필터를 고집하고 있지만 필자의 삶에서 이것이 작동하도록 할 수는 없으며이 특정 필터에 대해 최소한의 기사 만 있습니다.필터 사용 - CIMaskedVariableBlur

나는 흰색과 검은 색과 이미지 사이의 그라디언트가있는 마스크 (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

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!) 
}