在图像上附加多行文字并保存

时间:2012-01-17 07:37:24

标签: java image bufferedimage

我的目标是在图像上附加文字并保存图像。我可以在图像上附加文字。 我的问题是如何为文本指定区域,以及如何使其成为多行,以便数据不会越过边框。 代码: -

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

此处字符串s2不适合图像屏幕。在此先感谢。

1 个答案:

答案 0 :(得分:0)

在设置了计划使用的字体后,可以在当前图形上调用getFontMetrics()。然后,FontMetrics.stringWidth(your_string)将为您提供当前字体中的字符串宽度,就像它在BufferedImage中显示的那样。然后,您可以构建字符串,直到它超出图像的宽度,然后为下一行开始另一个字符串。一旦拆分字符串并知道需要包含多少行/字符串,就必须弄清楚字符串位置的垂直偏移。这次再次使用fontMetrics来获取字符串高度进行计算。

这是一个类似的问题,提供了一个简单的拆分版本:

Full-justification with a Java Graphics.drawString replacement?

这是一个实用程序类,在给定FontMetrics和字符串的情况下为您完成了大量的工作 http://www.java2s.com/Code/Java/2D-Graphics-GUI/WrapstringaccordingtoFontMetrics.htm

其他人可以评论我确定更新的Java版本是否具有与此相关的其他功能。