【问题标题】:How to create thumbnail for a webpage with iOS?如何使用 iOS 为网页创建缩略​​图?
【发布时间】:2014-09-12 02:30:40
【问题描述】:

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

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

【问题讨论】:

    标签: ios thumbnails


    【解决方案1】:

    您可以使用以下方法创建 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?

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

    希望对你有帮助

    【讨论】:

    • 谢谢你的回复,我会查的
    • 嗨@AlfuryDB,也许我没有清楚地描述我的问题,我想在不打开它的情况下获取这个网页网址。
    • 嗨,@alfuryDB,我误解了SLComposeViewController,事实上,当我添加一个url [twitter addURL:url]时,这将是一个缩略图。
    • SLComposeViewController,只是让您可以通过不同的社交网络共享信息,但好处是它是一个本地组件,可以让您访问,您只需启动它即可共享任何内容,操作系统会照顾关于共享信息(当视图控制器执行任何操作时,您可以在回调中获得响应)。因此,根据我的理解,您希望传递的 url 将自身转换为缩略图以显示在 SLComposeViewController 中?
    • 您可以在其中添加图像,该图像可以是缩略图。我知道你的意思,但我担心它不会自动将 url 转换为缩略图,如果你想这样做,你可以通过获取 UIWebView 的缩略图并将其加载到图像中来做中间点。您可以通过以下方式添加图像:[twitter addImage:[UIImage imageNamed:@"my_thumbnail_image.png"]];考虑到 twitter 肯定是 SLComposeViewController 类的一个实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2016-01-25
    • 2015-03-24
    • 2011-08-23
    • 2015-06-21
    • 2011-07-03
    相关资源
    最近更新 更多