Java:在图像上应用几何变换的文本

时间:2016-10-30 08:53:39

标签: java javafx javafx-2

我知道可以使用BufferedImage getGraphics {/ 1>}在图像上应用标准文字:

Graphics g = image.getGraphics();
g.setFont(g.getFont().deriveFont(30f));
g.drawString("Hello World!", 100, 100);
g.dispose()

我正在尝试创建一个应用程序,在其中我将能够应用具有几何变换的文本(例如旋转,剪切,投影),这样我最终可以获得如下图像:

ImageSample

是否有一种通用方法来应用具有几何变换的文本,如上图所示?

1 个答案:

答案 0 :(得分:2)

JavaFX被认为是标准的"从Java 8开始就具有这种易于使用的内置功能。您可以将任何转化应用于Text对象,并使用StackPane将其置于图像之上。

public class MyApp extends Application {

    @Override
    public void start(Stage stage) throws Exception {

        ImageView lena = new ImageView(new Image("main/Lenna.png")); //URL to image

        Text text1 = new Text("Hello World!");
        text1.setRotate(30);
        text1.setTranslateX(100);
        text1.setTranslateY(-100);
        text1.setFont(Font.font("Veranda", FontWeight.BOLD, 36));
        text1.setFill(Color.BLUE);

        Text text2 = new Text("Hello Lenna!");
        PerspectiveTransform perspectiveTrasform = new PerspectiveTransform();
        perspectiveTrasform.setUlx(10);
        perspectiveTrasform.setUly(10);
        perspectiveTrasform.setUrx(300);
        perspectiveTrasform.setUry(40);
        perspectiveTrasform.setLrx(300);
        perspectiveTrasform.setLry(60);
        perspectiveTrasform.setLlx(10);
        perspectiveTrasform.setLly(90);
        text2.setEffect(perspectiveTrasform);
        text2.setFont(Font.font("Veranda", FontWeight.BOLD, 36));

        StackPane pane = new StackPane(lena, text1, text2);
        Scene scene = new Scene(pane);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) throws Exception {

        launch(args);
    }
}

enter image description here

有关详细信息,另请参阅Applying Effects to Text