zoukankan      html  css  js  c++  java
  • 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;

      

  • 相关阅读:
    JAVA内存结构解析
    Android(IPC)进程间通讯1:详解Binder由来?
    Python-快速排序算法
    扫描二维码、条形码,生成二维码
    ios常用方法
    UITableView定义等高的cell
    UITableView总结
    Swift——常量&变量
    iOS平台Cordova插件的开发方法
    自定义iWatch App点击Glance后的跳转页
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/6272684.html
Copyright © 2011-2022 走看看