我注意到在Safari中,如果我通过Twitter共享页面,则会生成一个共享页面的缩略图。
我搜索了Google,发现AVAssetImageGenerator
包可以创建视频缩略图。是否有类似的方法来创建网页缩略图?
答案 0 :(得分:2)
您可以使用以下方法创建UIWebViews的缩略图:
UIView *newView = [view snapshotViewAfterScreenUpdates:YES];
或者您也可以使用:
UIGraphicsBeginImageContextWithOptions(myView.bounds.size, NO, 0);
[myView drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
重要!如果你想创建一个UIWebView的缩略图,你可以找到问题,比如,你截取屏幕并且页面没有完全加载,所以我建议你在页面加载时这样做,或者像我不得不这样做,将一个javascript标志本地调用iOS并在此特定时刻截取屏幕截图。您可以保存缩略图,使用您想要的机制存储它们(例如coredata并具有持久数据库以快速访问信息),或者您可以使用配置文件以及应用程序内部文件夹的路径,这确实是由你决定。但请记住UIWebView加载内容的“何时”,因为有时,我们会截取屏幕截图,视图中没有任何内容,您将始终获得空白页面。 而不是截取屏幕截图:webView:shouldStartLoadWithRequest:navigationType:将它带入webViewDidFinishLoad:但请记住,它并不意味着网页已正确加载!你可以有一个ajax事件或一个外部javascript事件,可以在屏幕上传内容,但UIWebView可以说它已经加载了!因此,有理由使用javascript标志本地调用内部函数来截取屏幕截图。
获得屏幕截图后,您必须调整其大小才能显示缩略图。例如,您可以使用:
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//UIGraphicsBeginImageContext(newSize);
// In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
// Pass 1.0 to force exact pixel size.
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
(The simplest way to resize an UIImage?中的解决方案)
但有几种方法可以做到这一点。我认为最好的是添加一个类别并以您想要的方式调整功能。
希望有所帮助