我在分析我的应用程序时,注意到在这个函数上花费了大量时间:
//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
}
什么是这个函数的一个很好的替代品,它可以在更短的时间内调整图像的大小?或者,我应该如何优化这样一个使用CoreGraphics的函数?
谢谢!
最佳答案
这可能与您调整此图像大小的速度一样快。调整大图像的大小需要数学计算。别以为有什么神奇的“快”按钮。如果有一个更快的方法,而没有取舍,那么这将是默认的。也就是说,有些事情你可以探索。
你的第一步是决定是否可以完全避免调整大小。你能把这个交给一个UIImageView
来处理吗?(当然,UIImageView
也需要调整图像的大小,但在这些方面它往往非常聪明。)
下一步是决定是否可以较少地调用此resize方法。您是否为同一图像重复调用此方法?
然后,您应该重新考虑选择opaque
。您选择了false
,但如果可以将其设置为true
,则将以忽略alpha通道为代价提高渲染性能。
然后,您应该考虑是否可以降低调整大小的质量。如果可以接受较低质量的图像,请考虑设置UIGraphicsGetCurrentContext.interpolationQuality = .low
。注意,这个你的方法已经设置为1,这是非视网膜,所以已经相当低的质量。
最后,您应该考虑将此工作移动到后台队列,并将调整大小处理为异步进程。这要复杂得多,需要在调整大小时提供一些占位符图像。
关于ios - 优化CoreGraphics功能/替代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44792562/