• 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;

      

  • 相关阅读:
    两数相加(B站看视频总结)
    正则表达式基础1
    C语言程序的错误和警告
    C语言运算符优先级和结合性一览表
    逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解
    C 语言实例
    电脑不显示桌面怎么办?
    135编辑器安卓客户端
    C语言实例-大小写字母间的转换
    C 语言实例
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/6272684.html
Copyright © 2020-2023  润新知