二维码图片文字居中问题

  前两天在为“批量生成二维码压缩并下载功能”做技术选型时,遇到了在不同服务器文字居中效果不一致问题,一直觉得是在不同系统对绘制文字的开始位置有问题引起,今天找到了解决方法,记录一下!

  具体的功能需求如下:

    1. 生成的二维码内包含一个居中的logo
    2. 二维码上面有一个居中的10位数字编号
    3. 10位数字编号要求有序
    4. 批量生成这样的二维码图片
    5. 对二维码图片打包压缩为zip进行下载

  考虑到该功能是系统管理员使用,使用频次不大,10的数字编号使用数据库序列实现,二维码使用Google的zxing,zip压缩包使用Java原生ZipOutputStream,zxing和ZipOutputStream的使用网上有很多就不写了,这里主要记录一下文字居中的方法。

/**
 * 向图片添加居中文字
 *
 * @param g 图片的Graphics对象
 * @param text 要添加的居中文字
 * @param rect 文字要相对居中的矩形
 * @param font 文字字体
 */
public void drawCenteredString(Graphics g, String text, Rectangle rect, Font font) {
    // 获取图片的FontMetrics
    FontMetrics metrics = g.getFontMetrics(font);
    // 计算开始绘制文字的x轴位置
    int x = rect.x + (rect.width - metrics.stringWidth(text)) / 2;
    // 计算开始绘制文字的y轴位置
    int y = rect.y + ((rect.height - metrics.getHeight()) / 2) + metrics.getAscent();
    // 设置字体
    g.setFont(font);
    // 设置文字颜色
    g.setColor(Color.black);
    // 绘制文字
    g.drawString(text, x, y);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值