如何使用iOS为网页创建缩略​​图?

时间:2014-07-21 14:25:53

标签: ios thumbnails

我注意到在Safari中,如果我通过Twitter共享页面,则会生成一个共享页面的缩略图。

我搜索了Google,发现AVAssetImageGenerator包可以创建视频缩略图。是否有类似的方法来创建网页缩略图?

1 个答案:

答案 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?中的解决方案)

但有几种方法可以做到这一点。我认为最好的是添加一个类别并以您想要的方式调整功能。

希望有所帮助