我正在尝试使用固定大小和固定高度的webView截图。 Web视图可以呈现任何webSite。我注意到,取决于渲染webView.layer.renderInContext使用的临时内存的网站更高。我的理解是,renderInContext首先在位图中生成屏幕截图,我认为当屏幕截图的高度和重量相同时,位图应始终具有相同的大小,而与内容无关。我的理解不正确吗?
屏幕截图的代码是:
autoreleasepool{
UIGraphicsBeginImageContextWithOptions(cgSizeToUse, false, 0)
webView.layer.renderInContext(UIGraphicsGetCurrentContext())
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
实施例: iphone 6 Plus上的webPage http://www.biography.com/people/ellen-page-267545的屏幕截图,宽度= 375,高度= 2000 CGFloat,占用200MB的临时内存。
iPhone 6 Plus上的webPage http://en.m.wikipedia.org/wiki/Ellen_Page的屏幕截图,宽度= 375,高度= 2000,CGFloat需要80MB的临时内存。
我不是图形专家,我想了解为什么会出现这种差异,以及是否有另一种方法可以截取scrollView内容,而不会占用大量内存。
此外,如果我能理解为什么当前方法内存消耗因内容而异,这将有助于我优化我的截图代码。
答案 0 :(得分:1)
UIWebView在内部使用CATiledLayer来呈现网页。根据呈现的网站,UIWebView会创建许多内部子图层。当我们尝试在Image上下文中呈现UIWebView内容时,会进行递归调用以获取所有图层的屏幕截图。
因此,取决于UIWebView如何在内部构建CATiledLAyer,截屏代码使用的临时内存差异很大(60MB - > 200MB)