JAVA使用外部字体将文字生成图片,并使用FontMetrics居中文字

本文介绍了一种使用Java生成带有外部字体的居中文本图片的方法。通过自定义类Loadfont加载外部字体文件,并利用FontMetrics类计算文本居中所需的坐标,实现了动态调整文字位置的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

  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;

 

  

转载于:https://www.cnblogs.com/0xcafedaddy/p/6272684.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值