做开发时,总是使用系统默认的白色背景会显得有些生硬,所以当我们以展示图片为目的时,不妨将图片放大、再做高斯模糊处理以作为背景。
我把这个处理过程用 Swift 封装成了一个函数,供大家参考。
//创建高斯模糊效果的背景
func createBlurBackground (image:UIImage,view:UIView,blurRadius:Float) {
//处理原始NSData数据
let originImage = CIImage(CGImage: image.CGImage )
//创建高斯模糊滤镜
let filter = CIFilter(name: "CIGaussianBlur")
filter.setValue(originImage, forKey: kCIInputImageKey)
filter.setValue(NSNumber(float: blurRadius), forKey: "inputRadius")
//生成模糊图片
let context = CIContext(options: nil)
let result:CIImage = filter.valueForKey(kCIOutputImageKey) as! CIImage
let blurImage = UIImage(CGImage: context.createCGImage(result, fromRect: result.extent()))
//将模糊图片加入背景
let w = self.view.frame.width
let h = self.view.frame.height
let blurImageView = UIImageView(frame: CGRectMake(-w/2, -h/2, 2*w, 2*h)) //模糊背景是界面的4倍大小
blurImageView.contentMode = UIViewContentMode.ScaleAspectFill //使图片充满ImageView
blurImageView.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight //保持原图长宽比
blurImageView.image = blurImage
self.view.insertSubview(blurImageView, belowSubview: view) //保证模糊背景在原图片View的下层
}
三个参数分别为:image(原始清晰图片)、view(你需要将生成的模糊背景插入在这个view的下层当做背景)、blurRadius(高斯模糊处理的模糊半径)
其中 let context = CIContext(options: nil)
这一句,在真机测试时,会引起控制台报错
这是苹果的一个 Bug ,想要回避这个信息输出可以用下面这一句进行替换:
let context = CIContext(options:[kCIContextUseSoftwareRenderer : true])
这句可以使图片渲染工作在 CPU 而非 GPU 完成,从而绕过这个 Bug,但是会引起效率下降,耗时大大增加,不推荐使用。
使用效果展示:
self.createBlurBackground(img, view: self.gifView, blurRadius: 50)