我正在用 Java 构建一个 Web 应用程序,如果我将网页的 URL 作为输入,我想要网页的整个屏幕截图。
我的基本想法是捕获渲染组件的显示缓冲区..我不知道该怎么做..请帮助..
我正在用 Java 构建一个 Web 应用程序,如果我将网页的 URL 作为输入,我想要网页的整个屏幕截图。
我的基本想法是捕获渲染组件的显示缓冲区..我不知道该怎么做..请帮助..
对于可以扩展以支持并发渲染的纯 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 的浏览器在这方面可能绰绰有余。
我在这个应用程序中使用了一个小技巧:
倒计时演示应用程序 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 引擎渲染器。