日期:2014-05-17  浏览次数:20713 次

java操作字体生成png图片
java生成png图片,前提不能固定图片大小,根据文字和文字字号 自动生成png图片。
网上找了一些方法都是需要固定图片大小然后生成图片的。有没有办法解决自动生成文字png图片的。图片实例如:

要求:随便输入文字,选择字体、字号、颜色等信息生成png图片。
各位大侠有做过类似例子吗?请赐教实例,谢谢
java操作字体png?不固定图片大小

------解决方案--------------------
这可以自己写,很容易实现。根据字体和字号以及需要输出的字符串可以获取图片需要的大小。
使用FontMetrica对象可以获取图片需要的高度和宽度。
------解决方案--------------------
引用:
生成验证码  前提是固定图片大小。各位能看明白我说的吧。最好给出例子,百度、google搜索谁都知道。

要根据Font和传入的字符串生成图片只要得到此font应用到String的width和height就可以了

public static void main(String[] args) throws Exception {
createImage("中华人民共和国",new Font("宋体",Font.BOLD,18),new File("e:/a.png"));
createImage("中华人民",new Font("黑体",Font.BOLD,30),new File("e:/a1.png"));
createImage("中华人民共和国",new Font("黑体",Font.PLAIN,24),new File("e:/a2.png"));
}
//根据str,font的样式以及输出文件目录
public static void createImage(String str,Font font,File outFile) throws Exception{
//获取font的样式应用在str上的整个矩形
  Rectangle2D r=font.getStringBounds(str, new FontRenderContext(AffineTransform.getScaleInstance(1, 1),false,false));
  int unitHeight=(int)Math.floor(r.getHeight());//获取单个字符的高度
//获取整个str用了font样式的宽度这里用四舍五入后+1保证宽度绝对能容纳这个字符串作为图片的宽度
  int width=(int)Math.round(r.getWidth())+1;
  int height=unitHeight+3;//把单个字符的高度+3保证高度绝对能容纳字符串作为图片的高度
//创建图片
  BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
  Graphics g=image.getGraphics();
  g.setColor(Color.WHITE);
  g.fillRect(0, 0, width, height);//先用白色填充整张图片,也就是背景
  g.setColor(Color.black);//在换成黑色
  g.setFont(font);//设置画笔字体
  g.drawString(str, 0, font.getSize());//画出字符串
  g.dispose();
  ImageIO.write(image, "png", outFile);//输出png图片
}