【发布时间】:2014-09-12 02:30:40
【问题描述】:
我注意到,在 Safari 中,如果我通过 Twitter 共享页面,则会生成正在共享的页面的缩略图。
我搜索了谷歌,发现AVAssetImageGenerator 包可以创建视频缩略图。有没有类似的方法来创建网页的缩略图?
【问题讨论】:
标签: ios thumbnails
我注意到,在 Safari 中,如果我通过 Twitter 共享页面,则会生成正在共享的页面的缩略图。
我搜索了谷歌,发现AVAssetImageGenerator 包可以创建视频缩略图。有没有类似的方法来创建网页的缩略图?
【问题讨论】:
标签: ios thumbnails
您可以使用以下方法创建 UIWebView 的缩略图:
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?)
但是有几种方法可以做到这一点。我认为最好的方法是添加一个类别并以您想要的方式调整功能。
希望对你有帮助
【讨论】:
SLComposeViewController,事实上,当我添加一个url [twitter addURL:url]时,这将是一个缩略图。