0

My Aim is to append text on the images and save the image. I am able to append text on image. My question is How to Specify the Area For the text, and how to make it Multi line, so that if data does not cross to the border. Code:-

public Test()
 {
s = "Welcome TO Image Rendering";
s1="Title data";
s2="DescriptionA fast paced action thriller about a stunt driver.He finds himself a target for some dangerous men after he agrees to help his beautiful neighbour, Irene. Subtitles: Chinesedata";
         Font f = new Font("Serif",Font.BOLD,22);
         text = new JLabel("Welcome TO Image Rendering");
         text.setFont(f);

         AttributedString astr = new AttributedString(s);
         astr.addAttribute(TextAttribute.FOREGROUND, Color.red, 0, 1);

         MediaTracker mt = new MediaTracker(this);
         image = Toolkit.getDefaultToolkit().createImage("c://Ci_Audio.jpg");
         mt.addImage(image,0);
         try{mt.waitForID(0);}catch(InterruptedException ie){}
         int width = image.getWidth(null);
         int height = image.getHeight(null);
         BufferedImage bimg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
         bimg.createGraphics().drawImage(image, 0, 0, this);
         bimg.getGraphics().setFont(f);
         bimg.getGraphics().drawString(s,10,50);
         bimg.getGraphics().drawString(s1,38,40);
         bimg.getGraphics().drawString(s2,188,84);
         img = new ImageIcon(bimg);
         label = new JLabel(img);
         p = new JPanel();
         p.add(label);
         getContentPane().add(p);
     }
     public static void main(String args[])
         {
         Test tt = new Test();
         tt.setDefaultCloseOperation(EXIT_ON_CLOSE);
         tt.setSize(360,305);
         tt.setVisible(true);
     }
}

Here String s2 Won't fit to the image screen. Thanks in Advance.

Code Hungry
  • 3,930
  • 22
  • 67
  • 95

1 Answers1

0

you can call the getFontMetrics() on your current Graphics after you've set the font you're planning to use. FontMetrics.stringWidth( your_string ) will then give you the width of the string in your current font as it would appear in your BufferedImage. You can then build up the string until it exceeds the width of your image and then start another string for the next line. You'll have to figure out the vertical offsets for the string positions once you've split up the string and know how many lines/strings you need to include. Use fontMetrics again this time to get the string height for calculation.

Here's a similar question that gives a simple version of splitting:

Full-justification with a Java Graphics.drawString replacement?

Here's a utility class that does a lot of this work for you given the FontMetrics and string http://www.java2s.com/Code/Java/2D-Graphics-GUI/WrapstringaccordingtoFontMetrics.htm

Someone else can comment I'm sure if more recent Java versions have additional functionality related to this.

Community
  • 1
  • 1
xkickflip
  • 768
  • 6
  • 17