Adding blur effect to background in swift

前端 未结 11 1943
鱼传尺愫
鱼传尺愫 2020-11-29 14:50

I am setting a background image to view controller. But also i want to add blur effect to this background. How can I do this?

I am setting background with following

11条回答
  •  粉色の甜心
    2020-11-29 15:22

    U can also use CoreImage to create blurred image with dark effect

    1. Make snapshot for image

      func snapShotImage() -> UIImage {
          UIGraphicsBeginImageContext(self.frame.size)
          if let context = UIGraphicsGetCurrentContext() {
              self.layer.renderInContext(context)
              let image = UIGraphicsGetImageFromCurrentImageContext()
              UIGraphicsEndImageContext()
              return image
          }
      
          return UIImage()
      }
      
    2. Apply CoreImage Filters as u wish with

      private func bluredImage(view:UIView, radius:CGFloat = 1) -> UIImage {
      let image = view.snapShotImage()
      
      if let source = image.CGImage {
          let context = CIContext(options: nil)
          let inputImage = CIImage(CGImage: source)
      
          let clampFilter = CIFilter(name: "CIAffineClamp")
          clampFilter?.setDefaults()
          clampFilter?.setValue(inputImage, forKey: kCIInputImageKey)
      
          if let clampedImage = clampFilter?.valueForKey(kCIOutputImageKey) as? CIImage {
              let explosureFilter = CIFilter(name: "CIExposureAdjust")
              explosureFilter?.setValue(clampedImage, forKey: kCIInputImageKey)
              explosureFilter?.setValue(-1.0, forKey: kCIInputEVKey)
      
              if let explosureImage = explosureFilter?.valueForKey(kCIOutputImageKey) as? CIImage {
                  let filter = CIFilter(name: "CIGaussianBlur")
                  filter?.setValue(explosureImage, forKey: kCIInputImageKey)
                  filter?.setValue("\(radius)", forKey:kCIInputRadiusKey)
      
                  if let result = filter?.valueForKey(kCIOutputImageKey) as? CIImage {
                      let bounds = UIScreen.mainScreen().bounds
                      let cgImage = context.createCGImage(result, fromRect: bounds)
                      let returnImage = UIImage(CGImage: cgImage)
                      return returnImage
                  }
              }
          }
      }
      return UIImage()
      }
      

提交回复
热议问题