iOS模拟器10.2.1上的模糊图像性能问题

时间:2019-05-23 19:56:32

标签: ios swift ios-simulator

我使用此代码来模糊我的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

我尚未在真实设备上对其进行测试,但不确定代码是否有效

1 个答案:

答案 0 :(得分:1)

该代码看起来还不错,尽管您应该缓存它返回的图像,而不是尽可能地重复调用它;正如Matt在下面的评论中指出的那样,您还应该使用共享的CIContext,而不是每次都设置一个新的CIContext。

您看到的性能问题是由于模拟器的性能特征与真实硬件完全不同。听起来Core Image正在使用模拟器的仿真OpenGL ES界面(速度较慢)或CPU(速度较慢)。在iOS设备上对其进行测试将使您对预期的性能有更好的了解。