Mat*_*mon 7 iphone objective-c uiwebview uiimage ios
非常类似于这个问题(也是这个答案),我试图从webview中取出UIImage.到目前为止,我正在使用答案中建议的代码,具体来说:
UIGraphicsBeginImageContext(webview.bounds.size);
[webview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
但是,当webview的内容大于屏幕时,生成的图像不完整且缺少补丁.有想法该怎么解决这个吗?
小智 18
我得到了答案:
您必须在创建图像之前将Webview的框架设置为完整的内容大小.在此之后,只需将尺寸设置回原点:
+ (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;
}
Run Code Online (Sandbox Code Playgroud)
DR的答案很好.唯一缺少的是考虑到屏幕的规模.我已经在我的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
}
}
Run Code Online (Sandbox Code Playgroud)