我使用此代码来模糊我的UIImage
extension UIImage {
func blurred(radius: CGFloat) -> UIImage {
let ciContext = CIContext(options: nil)
guard let cgImage = cgImage else { return self }
let inputImage = CIImage(cgImage: cgImage)
guard let ciFilter = CIFilter(name: "CIGaussianBlur") else { return self }
ciFilter.setValue(inputImage, forKey: kCIInputImageKey)
ciFilter.setValue(radius, forKey: "inputRadius")
guard let resultImage = ciFilter.value(forKey: kCIOutputImageKey) as? CIImage else { return self }
guard let cgImage2 = ciContext.createCGImage(resultImage, from: inputImage.extent) else { return self }
return UIImage(cgImage: cgImage2)
}
}
但是从此操作返回图像需要花费很长时间。
实际上,此操作大约需要2秒钟:
guard let cgImage2 = ciContext.createCGImage(resultImage, from: inputImage.extent) else { return self
我尚未在真实设备上对其进行测试,但不确定代码是否有效
答案 0 :(得分:1)
该代码看起来还不错,尽管您应该缓存它返回的图像,而不是尽可能地重复调用它;正如Matt在下面的评论中指出的那样,您还应该使用共享的CIContext,而不是每次都设置一个新的CIContext。
您看到的性能问题是由于模拟器的性能特征与真实硬件完全不同。听起来Core Image正在使用模拟器的仿真OpenGL ES界面(速度较慢)或CPU(速度较慢)。在iOS设备上对其进行测试将使您对预期的性能有更好的了解。