Search code examples
iosswiftuiimagecore-imagecifilter

Apply CIGaussianBlur only to a small part of an image


I need to apply a CIGaussianBlur filter only on a small part of an image like this:

enter image description here

Is there any way to do this? For example when I apply the filter perhaps I think that I have to specify the dimension of the filter (someone like CGRectMake).

var imageToBlur = CIImage(image: coro.logo)
var blurfilter = CIFilter(name: "CIGaussianBlur")
blurfilter.setValue(imageToBlur, forKey: "inputImage")
blurfilter.setValue(2, forKey: "inputRadius")
var resultImage = blurfilter.valueForKey("outputImage") as! CIImage
var blurredImage = UIImage(CIImage: resultImage)
self.immagineCoro.image = blurredImage

Solution

  • Try to use this

    func blurImage(image:UIImage, forRect rect: CGRect) -> UIImage?
        {
            let context = CIContext(options: nil)
            let inputImage = CIImage(CGImage: image.CGImage!)
    
    
            let filter = CIFilter(name: "CIGaussianBlur")
            filter?.setValue(inputImage, forKey: kCIInputImageKey)
            filter?.setValue((70.0), forKey: kCIInputRadiusKey)
            let outputImage = filter?.outputImage
    
            var cgImage:CGImageRef?
    
            if let asd = outputImage
            {
                cgImage = context.createCGImage(asd, fromRect: rect)
            }
    
            if let cgImageA = cgImage
            {
                return UIImage(CGImage: cgImageA)
            }
    
            return nil
        }