UIVisualEffectView模糊图像

时间:2018-08-28 09:54:55

标签: ios swift xcode image-processing blur

我使用UIVisualEffectView来模糊我的图像视图。比起我,我使用这段代码将其转换为图像并保存到图像库。

 UIGraphicsBeginImageContextWithOptions(imageContainerView.bounds.size, true, 1)
 imageContainerView.drawHierarchy(in: imageContainerView.bounds, afterScreenUpdates: true)
 let newImage = UIGraphicsGetImageFromCurrentImageContext()!
 UIGraphicsEndImageContext()

imageContainerView是一个包含imageview和UIVisualEffectView的视图。

在将imageContainerView转换为图像之前,将其尺寸增大为2000x2000,这样我将获得高质量的图像。如果不这样做,imageContainerView中的所有图像都会变成像素化。

问题在于,将imageContainerView转换为图像后,由于我增加了容器视图的大小,模糊的图像几乎变得不模糊了。

您能建议解决此问题的方法吗? 我只想得到一个模糊的图像,所以,如果您知道其他使用滑块模糊图像的方法(模糊代码应能快速工作,以使UI不会冻结),请告诉我。

1 个答案:

答案 0 :(得分:0)

  

我只想得到模糊的图像

好吧,您可以实现一些模糊滤镜效果,例如这种效果,以及将其滑动到其上。

var context = CIContext(options: nil)

func blur() {

    let blurFilter = CIFilter(name: "CIGaussianBlur") 
    let beginImage = CIImage(image: YOURIMAGE!)
    blurFilter!.setValue(beginImage, forKey: kCIInputImageKey)
    blurFilter!.setValue(8, forKey: kCIInputRadiusKey)

    let cropFilter = CIFilter(name: "CICrop")
    cropFilter!.setValue(blurFilter!.outputImage, forKey: kCIInputImageKey)
    cropFilter!.setValue(CIVector(cgRect: beginImage!.extent), forKey: "inputRectangle")

    let output = cropFilter!.outputImage 
    let cgImg = context.createCGImage(output!, from: output!.extent)
    let processedImage = UIImage(cgImage: cg cgImg mg!)
    bg.image = processedImage
}

或者在GitHub上有多个这样的库,例如:https://github.com/FlexMonkey/Blurable