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;

      

  • 相关阅读:
    多线程、方便扩展的Windows服务程序框架
    C#并行开发_Thread/ThreadPool, Task/TaskFactory, Parallel
    C#并行编程-Task
    C#线程篇---Task(任务)和线程池不得不说的秘密(5)
    C# 线程知识--使用Task执行异步操作
    C# 线程池执行操作例子
    c#子线程执行完怎么通知主线程
    C#子线程执行完后通知主线程
    再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化
    熵的函数为什么用H,而熵的英文是entropy,好像没关系。实际原因是
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/6272684.html
Copyright © 2011-2022 走看看