JAVA使用外部字体将文字生成图片,并使用FontMetrics居中文字
需求:
1.用户输入文字,根据外部字体,将文字生成图片
2.输出的文字需要居中在图片中显示
遇到的问题:
1.如何导入外部字体?使用Java的Font类,所有的字体都是系统安装过的
2.每次用户输入的字符串长度,图片的尺寸是可以改变的,如果做到每次计算出文字居中的x轴,y轴?
解决办法:
1.如何导入外部字体?使用Java的Font类,所有的字体都是系统安装过的
import java.awt.Font; import java.io.File; import java.io.FileInputStream; public class Loadfont { public static Font loadFont(String fontFileName, float fontSize) //第一个参数是外部字体名,第二个是字体大小 { try { File file = new File(fontFileName); FileInputStream aixing = new FileInputStream(file); Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, aixing); Font dynamicFontPt = dynamicFont.deriveFont(fontSize); aixing.close(); return dynamicFontPt; } catch(Exception e)//异常处理 { e.printStackTrace(); return new java.awt.Font("宋体", Font.PLAIN, 14); } } public static java.awt.Font Font(){ String root=System.getProperty("user.dir");//项目根目录路径 Font font = Loadfont.loadFont(root+"/data/PRISTINA.ttf", 18f);//调用 return font;//返回字体 } public static java.awt.Font Font2(){ String root=System.getProperty("user.dir");//项目根目录路径 Font font = Loadfont.loadFont(root+"/data/XXXX.ttf", 18f); return font;//返回字体 } }
2.每次用户输入的字符串长度,图片的尺寸是可以改变的,如果做到每次计算出文字居中的x轴,y轴?
[使用FontMetrics类]
FontMetrics类的使用请参考:http://mikewang.blog.51cto.com/3826268/871765
/**获取起始x轴*/ int strLen = fm.stringWidth(str); int x = (width - strLen)/2; /** 用于获得垂直居中y */ Rectangle clip = g.getClipBounds(); FontMetrics fm = g.getFontMetrics(font); int ascent = fm.getAscent(); int descent = fm.getDescent(); int y = (clip.height - (ascent + descent)) / 2 + ascent;