4

その場でサムネイルをバッチ生成したい一連のローカル HTML ページがあります (完全な Web ページではなく、サムネイルのみを表示したい)。これは私がこれを達成している方法です:

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) 私の一般的なアプローチは正しいですか? これは、Web ページのサムネイルをオンザフライでバッチ処理する最も効率的な方法ですか?

2) オフスクリーン UIWebView からサムネイルをレンダリングできるようにしたいのですが、UIWebView をビュー階層に追加しない限り、webViewDidFinishLoad: は呼び出されません。これを回避する方法はありますか?

3) webViewDidFinishLoad: で UIWebView の画像をキャプチャしようとすると、空白の画像が表示されます。キャプチャが機能するために人為的な遅延を設定する必要があります。これを回避する方法はありますか?

ありがとう!

4

1 に答える 1