使用java将网页转换为jpeg图像

时间:2010-04-30 17:03:46

标签: java jpeg image-capture webpage-screenshot

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

我的基本想法是捕获渲染组件的显示缓冲区..我不知道如何做到这一点.. 请帮助..

2 个答案:

答案 0 :(得分:3)

我用这个应用程序有一个小技巧:

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

问题是你需要有一台致力于此的机器。

所以,诀窍很容易。

  • 创建一个采用as的应用程序 参数是您要获取的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引擎渲染器。

答案 1 :(得分:3)

对于可以扩展以支持并发呈现的纯java解决方案,您可以使用为HTML提供Swing组件的Java HTML4 / CSS2浏览器,例如Cobra。实例化此组件时,可以调用它的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 image API将其另存为JPG。

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

与已建立的本机浏览器相比,基于Java的浏览器通常比较苍白。但是,由于您的目标是静态图像,而不是交互式浏览器,因此基于Java的浏览器在这方面可能绰绰有余。