首页 > 解决方案 > iOS 模拟器 10.2.1 上的模糊图像性能问题

问题描述

我用这段代码来模糊我的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}

我没有在真机上测试过,但不确定代码是否有效

标签: iosswiftios-simulator

解决方案


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

您看到的性能问题是由于模拟器的性能特征与真实硬件有很大不同。听起来 Core Image 要么使用模拟器的模拟 OpenGL ES 接口(速度很慢),要么使用 CPU(速度较慢)。在 iOS 设备上测试它会让你更好地了解你应该期待的性能。


推荐阅读