【问题标题】:Java: apply geometrically-transformed text on an imageJava:在图像上应用几何变换的文本
【发布时间】:2016-10-30 08:53:38
【问题描述】:

我知道可以使用BufferedImagegetGraphics 在图像上应用标准文本:

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

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

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

【问题讨论】:

  • 你想用什么库,Swing?
  • 它可以是 Swing 或其他任何被认为是标准的东西

标签: java javafx javafx-2


【解决方案1】:

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);
    }
}

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

【讨论】:

  • 太棒了!谢谢!
  • 您是如何获得相同图像的?好奇
猜你喜欢
  • 2020-10-15
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2016-12-25
  • 2021-12-26
  • 1970-01-01
相关资源
最近更新 更多