在JCEF浏览器中获取网页的屏幕截图

时间:2016-08-22 10:48:10

标签: java chromium-embedded webpage-screenshot

问题:   我在java项目中使用JCEF(java-Chromium Embedded Framework),现在我想在CEF浏览器中获取网页的截图,但我没有为此找到API。有办法做到这一点吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

据我所知,CefBrowser是基于AWT的。要创建此类组件的屏幕截图,您可以(必须?)创建整个屏幕的捕获,限制为组件覆盖的区域。

这样的事情会起作用:

// Your browser instance.
org.cef.browser.CefBrowser browser = ... 

// Obtain the component that you want to capture in a screenshot.
java.awt.Component component = browser.getUIComponent();

// Determine what area of the entire screen is covered by the component.
java.awt.Point p = new java.awt.Point(0, 0);
javax.swing.SwingUtilities.convertPointToScreen(p, component);
java.awt.Rectangle region = component.getBounds();
region.x = p.x;
region.y = p.y;

// Store the selected area from the screen in a image buffer.
java.awt.image.BufferedImage image = new java.awt.Robot().createScreenCapture( region );

要保存缓冲区到文件,请创建File实例(如果要向用户显示一个不错的“另存为”对话框,请使用JFileChooser)并使用javax.imageio.ImageIO#write(RenderedImage, String, File)将图像存储到文件中。第二个参数指的是您要使用的文件格式(png,bmp等)。

如果任何人都可以提供直接存储组件的代码示例,而不是将其作为较大屏幕的一部分捕获(它还将捕获您感兴趣的其他组件),我会非常感兴趣。