2016-10-30 6 views
1

Я знаю, что можно применить стандартный текст на изображении с использованием BufferedImage «s getGraphics:Java: применять геометрический преобразованный текст на изображении

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

Я пытаюсь создать приложение, в котором я буду быть в состоянии применить текст с геометрическими преобразованиями (например, вращения, сдвига, проекционных), такие, что я могу, наконец, получить изображения, которые выглядят как:

ImageSample

ли есть общий способ применить текст с геометрическим преобразования, как в приведенном выше изображении?

+0

Какую библиотеку вы хотите использовать, Swing? – user1803551

+0

Это может быть Swing или что-то еще, что считается стандартным – SomethingSomething

ответ

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 для получения дополнительной информации.

+0

Amazing! Спасибо! – SomethingSomething

+0

как вы получили одно и то же изображение? jux curious – Elltz

+0

@Elltz https://en.wikipedia.org/wiki/Lenna – user1803551

Смежные вопросы