当我注意到在此功能上花费了大量时间时,我正在分析我的应用程序:
//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的这样的函数?
谢谢!
答案 0 :(得分:2)
这可能与您调整此图片的速度一样快。调整大图像的大小需要数学。不要想象有一些神奇的“快速制造”按钮。如果有更快的方法没有权衡,那么这将是默认的。也就是说,你可以探索一些东西。
您的第一步是决定是否可以完全避免调整大小。你能把它交给UIImageView
并让它照顾好事情吗? (当然UIImageView
也需要调整图像的大小,但是对于这些事情它往往非常聪明。)
下一步是决定是否可以不那么频繁地调用此调整大小方法。您是否为同一图像重复调用此方法?
然后,您应该重新考虑opaque
的选择。您选择了false
,但如果您可以将其设置为true
,则会以忽略Alpha通道为代价提高渲染性能。
然后您应该考虑是否可以降低调整大小的质量。如果您可以接受质量较低的图片,请考虑设置UIGraphicsGetCurrentContext.interpolationQuality = .low
。请注意,您的方法已经将比例设置为1,这是非Retina所以已经非常低质量。
最后,您应该考虑将此工作移至后台队列并将调整大小作为异步进程处理。这要复杂得多,并且需要在调整大小时提供一些占位符图像。