Convertir le contenu d'UIWebview en UIImage lorsque le webview est plus grand que l'écran

Très similaire à cette question (et aussi à cette réponse ), j'essaie de faire un UIImage à partir d'un webview. Jusqu'à présent, j'utilise le code suggéré dans la réponse, en particulier:

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

Toutefois, lorsque le contenu de la vue Web est plus grand que l'écran, les images résultantes ne sont pas complètes et ont des correctifs manquants. Des idées pour résoudre le problème?

J'ai la réponse:

Vous devez définir le cadre de la vue Web à la taille totale du contenu juste avant de créer l'image. Après cela, il suffit de redéfinir la taille à l'origine:

 + (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; } 

La réponse de DR est correcte. La seule chose qui manque est de prendre en count l' échelle de l'écran. Je l'ai corrigé dans ma version Swift et ça marche bien pour moi.

 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 } } 

Je pense que cela pourrait aider

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

@ La réponse de Jibeex a fonctionné pour moi. Mais j'ai dû append le code suivant

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

au dessous de

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

pour qu'il fonctionne pleinement. Ecrire comme réponse parce que je n'ai pas assez de réputation pour commenter.