我有一组本地HTML页面,我想批量生成缩略图(我只想显示缩略图,而不是完整的网页)。这就是我实现这个目标的方式:
NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:link];
NSURL* url = [NSURL fileURLWithPath:path];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 725, 1004)];
webView.delegate = cell;
[webView loadRequest:request];
[self.view addSubview:webView]; // doesn't work without this line, but then the UIWebView is onscreen
然后在代表中:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[self performSelector: @selector(render:) withObject: webView afterDelay: 0.01f];
}
- (void) render: (id) obj
{
UIWebView* webView = (UIWebView*) obj;
CGSize thumbsize = CGSizeMake(96,72);
UIGraphicsBeginImageContext(thumbsize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat scalingFactor = thumbsize.width/webView.frame.size.width;
CGContextScaleCTM(context, scalingFactor,scalingFactor);
[webView.layer renderInContext: context];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.thumbnail.image = resultImage;
}
以下是我的问题:
1)我的一般方法是否正确?这是批量处理网页缩略图的最有效方法吗?
2)我希望能够从屏幕外的UIWebView渲染缩略图,但webViewDidFinishLoad:除非我将UIWebView添加到视图层次结构中,否则不会被调用。有没有办法可以避免这种情况?
3)如果我尝试在webViewDidFinishLoad:中捕获UIWebView的图像,我会得到一张空白图像。我必须为捕获工作做出人为的延迟。有什么方法吗?
谢谢!
答案 0 :(得分:1)
1)这似乎是我所知道的唯一方法,而不依赖于第三方基于服务器的API(如果存在)
2)您可以通过将其框架设置为离屏位置来在屏幕外绘制UIWebView。例如320,568,725,1008。我还没有测试过,但您甚至可以将视图设置为1 x 1px帧。
3)我想这是因为当调用webViewDidFinishLoad:时,在Web视图上调用了SetNeedsDisplay(),但Web视图尚未重新绘制。我不确定如何解决这个问题。