2017-09-07 3 views
0

Je me suis graduellement mis à la tête des filtres mais je ne peux pas pour la vie de moi obtenir ce travail et il ya des articles minimes sur ce filtre spécifique.À l'aide de filtres - CIMaskedVariableBlur

J'ai un masque (png) avec un dégradé entre le blanc et le noir et une image et je ne peux pas l'obtenir pour flouter une image appelée bg.png. L'application se bloque avec:

'NSUnknownKeyException', la raison: '[setValue: forUndefinedKey:]: cette classe n'est pas valeur de clé de codage conforme à la inputMaskImage clé.'

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 

Je joue autour de différentes façons de le faire, mais tous donnent la même erreur et je suppose qu'il est à voir avec le type de masque? ... Je ne sais pas!

Répondre

0

Si vous ciblez iOS 8, la clé kCIInputMaskImageKey ne fonctionnera pas. C'est seulement pour iOS 9 ou plus tard. Mais les bonnes nouvelles sont pouvez obtenir des choses à travailler dans iOS 8 en tapant le nom des clés. D'habitude, je le fais de toute façon. Voici une fonction qui devrait fonctionner pour vous:

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