当webview大于屏幕时,将UIWebview内容转换为UIImage

非常类似于这个问题 (也是这个答案 ),我试图从Web视图中创build一个UIImage。 到目前为止,我正在使用在答案中build议的代码,具体来说:

UIGraphicsBeginImageContext(webview.bounds.size); [webview.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

但是,当webview的内容大于屏幕时,生成的图像不完整,缺less补丁。 有想法该怎么解决这个吗?

我得到了答案:

您必须在创build图像之前将Web视图的框架设置为完整的内容大小。 之后,只需将尺寸设置为原点即可:

 + (UIImage *) imageFromWebView:(UIWebView *)view { // tempframe to reset view size after image was created CGRect tmpFrame = view.frame; // set new Frame CGRect aFrame = view.frame; aFrame.size.height = [view sizeThatFits:[[UIScreen mainScreen] bounds].size].height; view.frame = aFrame; // do image magic UIGraphicsBeginImageContext([view sizeThatFits:[[UIScreen mainScreen] bounds].size]); CGContextRef resizedContext = UIGraphicsGetCurrentContext(); [view.layer renderInContext:resizedContext]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // reset Frame of view to origin view.frame = tmpFrame; return image; } 

DR的答案很好。 唯一缺less的是考虑到屏幕的规模 。 我已经纠正了我的Swift版本,它适用于我。

 extension UIWebView{ func snapshotForCompletePage() -> UIImage { // tempframe to reset view size after image was created let tmpFrame: CGRect = self.frame // set full size Frame var fullSizeFrame: CGRect = self.frame fullSizeFrame.size.height = self.scrollView.contentSize.height self.frame = fullSizeFrame // here the image magic begins UIGraphicsBeginImageContextWithOptions(fullSizeFrame.size, false, UIScreen.mainScreen().scale) let resizedContext: CGContextRef = UIGraphicsGetCurrentContext()! self.layer.renderInContext(resizedContext) let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() // reset Frame of view to origin self.frame = tmpFrame return image } } 

我认为这可能有帮助

 UIGraphicsBeginImageContext([webView sizeThatFits:[[UIScreen mainScreen] bounds].size]]); 

@ Jibeex的答案为我工作。 但是我不得不添加下面的代码

  fullSizeFrame.size.width = self.scrollView.contentSize.width 

下面

  fullSizeFrame.size.height = self.scrollView.contentSize.height 

为了充分的工作。 写作答案,因为我没有足够的评论声望。