优化CoreGraphics功能/替代

时间:2017-06-28 02:08:54

标签: ios swift optimization

当我注意到在此功能上花费了大量时间时,我正在分析我的应用程序:

    //http://samwize.com/2016/06/01/resize-uiimage-in-swift/
    /// Returns a image that fills in newSize
    func resizedImage(newSize: CGSize) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0);
        let rect: CGRect = CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: newSize.width, height: newSize.height))
        self.draw(in: rect)
        let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return newImage
    }

Rails ignores columns from second table when using .select

这个功能有什么好的替代方案可以在极短的时间内调整图像大小?或者,我应该如何优化使用CoreGraphics的这样的函数?

谢谢!

1 个答案:

答案 0 :(得分:2)

这可能与您调整此图片的速度一样快。调整大图像的大小需要数学。不要想象有一些神奇的“快速制造”按钮。如果有更快的方法没有权衡,那么这将是默认的。也就是说,你可以探索一些东西。

您的第一步是决定是否可以完全避免调整大小。你能把它交给UIImageView并让它照顾好事情吗? (当然UIImageView也需要调整图像的大小,但是对于这些事情它往往非常聪明。)

下一步是决定是否可以不那么频繁地调用此调整大小方法。您是否为同一图像重复调用此方法?

然后,您应该重新考虑opaque的选择。您选择了false,但如果您可以将其设置为true,则会以忽略Alpha通道为代价提高渲染性能。

然后您应该考虑是否可以降低调整大小的质量。如果您可以接受质量较低的图片,请考虑设置UIGraphicsGetCurrentContext.interpolationQuality = .low。请注意,您的方法已经将比例设置为1,这是非Retina所以已经非常低质量。

最后,您应该考虑将此工作移至后台队列并将调整大小作为异步进程处理。这要复杂得多,并且需要在调整大小时提供一些占位符图像。