我注意到在 Safari 中,如果我通过 Twitter 共享页面,则会生成共享页面的缩略图。
我在 Google 上搜索了一下,发现 AVAssetImageGenerator
包可以创建视频缩略图。有没有类似的方法来创建网页的缩略图?
最佳答案
您可以使用以下方法创建 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 加载内容的“时间”,因为有时,我们截取屏幕截图,但 View 中没有任何内容,您将始终看到一个空白页面。 不要在 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? 中找到)
但是有几种方法可以做到这一点。我认为最好的方法是添加一个类别并按照您想要的方式调整功能。
希望对你有帮助
关于ios - 如何使用 iOS 为网页创建缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867575/