gpt4 book ai didi

iphone - 将 UIWebView 渲染到 ImageContext 中

转载 作者:行者123 更新时间:2023-12-03 18:32:36 26 4
gpt4 key购买 nike

我正在 try catch UIWebView 的内容,包括用户不可见的内容。即整个网页,即使用户只看顶部。

环顾四周,我发现捕获 UIView 的最佳方法是检索其图层并使用 renderInContext。

然而,UIWebView 似乎正在使用自己的 CALayer 实现,其行为更像 CATiledLayer,尽管它仍然声称是标准 CALayer。当我调用 renderInContext 时,我只获取网页的一部分(最多向下 940 像素),而不是整个页面。

有没有人对如何执行以下任一操作有任何想法:强制 UIWebView 向下滚动另一个 940px(显然这远非理想),或者告诉它支持 WebView 的任何 CALayer 品种,以便在我询问时呈现其所有内容到。

干杯

编辑:我应该补充一点,当前更改 webview 的框架以适应通过 javascript 检索的页面的大小。

最佳答案

我已经发布了一个应用程序 ( Web2Pic ) 来做到这一点,请相信我 UIGraphicsBeginImageContext(webView.frame.size);除了从 UIWebView 的可见区域获取小图像之外什么也做不了;-(

正确的方法有点复杂,但它确实有效:

1.在我们的UIWebView中使用JavaScript来获取这些浮点值:

   //Whole page size in HTML coordinate
document.body.scrollWidth
document.body.scrollHeight
//UIWebView visible size in HTML coordinate
window.innerWidth
window.innerHeight

2.现在我们可以将整个页面“切割”成几十个UIWebView大小的小块。然后我们可以单独捕获每个小块并将它们保存到我们的缓存中。我通过计算页面偏移量并使用 UIGraphicsBeginImageContext(webView.frame.size); 来获取图像数组来实现此目的。另外,您应该将图像数组缓存到文件系统中,否则应用程序最终会崩溃!

3.当我们最终获得所有小块时,我们可以启动全分辨率上下文:UIGraphicsBeginImageContext(CGSizeMake(document.body.scrollWidth,document.body.scrollHeight));

4.根据坐标将每个小图像渲染到大上下文中。并且小心角落,每行/行中的最后一个图像可能不是完整图像。

5.还剩下一步:保存大图。 不要将其保存到相册中,因为iOS会自动降低相册中图像的分辨率。相反,我们可以将其保存到文件系统中并启用应用程序的 iTunes 文件共享 支持,甚至编写一个简单的应用程序内照片管理器。

希望这些能有所帮助;-)

姬一朝峰

关于iphone - 将 UIWebView 渲染到 ImageContext 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/469764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com