【发布时间】:2011-12-09 10:34:14
【问题描述】:
我正在寻找一种方法来加载页面并将渲染保存为图像,就像您对 CutyCapt 所做的那样(QT + webkit EXE 可以做到这一点)。
目前,在没有 JavaFX 的情况下,我通过从 java 调用外部进程并渲染到文件而不是将该文件加载到 ImageBuffer 中来做到这一点......既不是非常优化也不实用,甚至更不跨平台......
使用 JavaFX2+ 我尝试使用 WebView 和 WebEngine:
public class WebComponentTrial extends Application {
private Scene scene;
@Override
public void start(final Stage primaryStage) throws Exception {
primaryStage.setTitle("Web View");
final Browser browser = new Browser();
scene = new Scene(browser, 1180, 800, Color.web("#666970"));
primaryStage.setScene(scene);
scene.getStylesheets().add("webviewsample/BrowserToolbar.css");
primaryStage.show();
}
public static void main(final String[] args) {
launch(args);
}
}
class Browser extends Region {
static { // use system proxy settings when standalone application
// System.setProperty("java.net.useSystemProxies", "true");
}
final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();
public Browser() {
getStyleClass().add("browser");
webEngine.load("http://www.google.com/");
getChildren().add(browser);
}
@Override
protected void layoutChildren() {
final double w = getWidth();
final double h = getHeight();
layoutInArea(browser, 0, 0, w, h, 0, HPos.CENTER, VPos.CENTER);
}
@Override
protected double computePrefWidth(final double height) {
return 800;
}
@Override
protected double computePrefHeight(final double width) {
return 600;
}
}
有一个已弃用的方法:renderToImage in Scene(请参阅下面的链接)可以做一些接近的事情,我可能可以使用它,但它已被弃用......
它在 JavaFX 中被弃用似乎意味着没有 javadoc 广告替换方法,因为我无权访问代码,我看不到它是如何完成的......
这里有几个网站,我在其中找到了一些信息,但没有将网页呈现为图像:
http://tornorbye.blogspot.com/2010/02/how-to-render-javafx-node-into-image.html
canvasImage 和 saveImage(canvasImage, fc.getSelectedFile()) 来自这个:
http://javafx.com/samples/EffectsPlayground/src/Main.fx.html
其他:
http://download.oracle.com/javafx/2.0/webview/jfxpub-webview.htm
http://download.oracle.com/javafx/2.0/get_started/jfxpub-get_started.htm
http://fxexperience.com/2011/05/maps-in-javafx-2-0/
【问题讨论】:
标签: java image save render javafx