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

Java: apply geometrically-transformed text on an image

我知道可以使用 BufferedImagegetGraphics:

在图像上应用标准文本
Graphics g = image.getGraphics();
g.setFont(g.getFont().deriveFont(30f));
g.drawString("Hello World!", 100, 100);
g.dispose()

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

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

JavaFX 是 "considered standard" 自 Java 8 以来,内置易于使用。您可以对 Text object and use a 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);
    }
}

另请参阅 Applying Effects to Text 了解更多信息。