CIFilter不起作用。

3

我尝试使用以下代码向图层添加模糊效果。
但它没有生效,有什么建议吗?

let layer = CALayer()
layer.frame = CGRect(x: 150, y: 150, width: 150, height: 150)
layer.backgroundColor = UIColor.blue.cgColor
layer.contents = UIImage(named: "D1")?.cgImage

if let filter = CIFilter(name: "CIGaussianBlur", withInputParameters: ["inputRadius": 15]) {
filter.setDefaults()
layer.filters = [filter]
}
view.layer.addSublayer(layer)

它只是显示了图像,没有滤镜效果。我真的很困惑。谢谢任何建议。

如果您注释掉filter.setDefaults()会发生什么? - Louis Leung
@LouisLeung 不管有没有 filter.setDefaults(),结果都是一样的。 - JsW
1个回答

2
这在iOS上不起作用。来自Apple文档:

特别注意事项

iOS中不支持该属性。

您需要以“长”的方式实现它:
let ciInput = CIImage(image: UIImage(named: "D1")!)
let filter = CIFilter(name: "CIGaussianBlur", withInputParameters: ["inputImage": ciInput, "inputRadius": 15])
let ciOutput = filter?.outputImage
let ciContext = CIContext(options: nil)
let cgImage = ciContext.createCGImage(ciOutput!, from: (ciOutput?.extent)!)
layer.contents = cgImage

请注意,我的Swift 4代码未经测试。可能存在一两个构建问题(特别是解包),因此在运行时可能会出现nil。我提供Swift代码作为链接到上面问题的答案的良好翻译。

是的,这基本上可以工作!请注意,使用此方法模糊会在输入半径范围内创建一个模糊边框... 我用一个修补程序解决了这个问题(在框架中考虑它..)。 - Kev Wats

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接