Java:在图像上应用几何变换的文本
Java: apply geometrically-transformed text on an image
我知道可以使用 BufferedImage
的 getGraphics
:
在图像上应用标准文本
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 了解更多信息。
我知道可以使用 BufferedImage
的 getGraphics
:
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 了解更多信息。