【问题标题】:converting webpage into jpeg image using java使用java将网页转换为jpeg图像
【发布时间】:2010-04-30 17:03:46
【问题描述】:

我正在用 Java 构建一个 Web 应用程序,如果我将网页的 URL 作为输入,我想要网页的整个屏幕截图。

我的基本想法是捕获渲染组件的显示缓冲区..我不知道该怎么做.. 请帮忙..

【问题讨论】:

    标签: java jpeg image-capture webpage-screenshot


    【解决方案1】:

    我在这个应用中使用了一个小技巧:

    count down demo app http://img580.imageshack.us/img580/742/capturadepantalla201004wd.png 具有 blog.stackoverflow.com 页面的 Java 应用程序(点击图片观看演示视频)

    问题是您需要一台专门用于此的机器。

    所以,诀窍很简单。

    • 创建一个应用程序 参数你要获取的 URL。

    • 然后用Desktop.open( url )打开它会触发当前 网页浏览器。

    • 最后用 java.awt.Robot 并将其保存到 diks。

    类似:

     class WebScreenShot {
         public static void main( String [] args ) {
             Desktop.getDesktop().open( args[0] );
             Robot robot = new Robot();
             Image image = robot.createScreenCapture( getScreenResolutionSize() );
             saveToDisk( image );
         }
      }
    

    这个解决方案远非完美,因为它需要整个操作系统,但如果你有一个专门用于这个应用程序的虚拟机,你就可以很容易地抓取网络并截取屏幕截图。

    将此应用程序作为非侵入式应用程序的问题在于,到目前为止,还没有一个好的用于 Java 的 html 引擎渲染器。

    【讨论】:

    • 请注意,这不适用于headless 服务器。
    • @Balusc 是的,实际上我将它作为独立应用程序运行。
    【解决方案2】:

    对于可以扩展以支持并发渲染的纯 Java 解决方案,您可以使用 Java HTML4/CSS2 浏览器,例如 Cobra,它为 GUI 提供 Swing 组件。当你实例化这个组件时,你可以调用它的paint(Graphics g) 方法将自己绘制成离屏图像

    E.g.
    Component c = ...; // the browser component
    BufferedImage bi = new BufferedImage(c.getWidth(), c.getHeight(), TYPE_INT_RGB)
    Graphics2d g = bi.createGraphics();    
    c.paint(g);
    

    然后您可以使用 java 图像 API 将其保存为 JPG。

    JPEGImageEncoder encoder = JPEGCodec.createEncoder(new FileOutputStream("screen.jpg"));
    enncoder.encode(bi);  // encode the buffered image
    

    与现有的本地浏览器相比,基于 Java 的浏览器通常相形见绌。但是,由于您的目标是静态图像,而不是交互式浏览器,因此基于 Java 的浏览器在这方面可能绰绰有余。

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 2015-03-18
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多