当前位置: 首页> 最新文章列表> 如何搭配 imagefontwidth() 和 imagefontheight() 一起使用,获取完整的字体字符宽高尺寸?

如何搭配 imagefontwidth() 和 imagefontheight() 一起使用,获取完整的字体字符宽高尺寸?

M66 2025-06-01

在使用 PHP 进行图像处理时,内建的 GD 库提供了诸如 imagestring()imagettftext() 等函数来绘制文本。而对于位图字体(bitmap fonts),我们可以使用 imagefontwidth()imagefontheight() 来获取字体的尺寸,以便正确计算字符在图像中的位置、对齐方式或文本包裹边界。

本文将介绍这两个函数的用法,并示范如何搭配使用它们,计算出一段文本的整体宽高,确保你能在图像中精准地布局文本内容。

1. 函数简介

imagefontwidth()

int imagefontwidth(int $font);

该函数返回给定字体编号对应的单个字符的宽度(像素)

imagefontheight()

int imagefontheight(int $font);

该函数返回给定字体编号对应的单个字符的高度(像素)

PHP 的 GD 库提供了 5 种内建字体(编号从 1 到 5),编号越大字体越大。

2. 计算一段文本的宽度和高度

要获取一整段字符串绘制后所需的像素区域大小,我们只需将单字符的宽高与字符串长度进行组合计算:

$text = "Hello, PHP!";
$font = 3; // 可用范围为 1 到 5

$charWidth = imagefontwidth($font);
$charHeight = imagefontheight($font);

$textWidth = strlen($text) * $charWidth;
$textHeight = $charHeight;

echo "文本宽度: {$textWidth}px\n";
echo "文本高度: {$textHeight}px\n";

此代码片段将告诉你使用字体 3 绘制 "Hello, PHP!" 这段文字所占的像素宽高。

3. 创建图像并绘制文字(示例)

下面是一个完整的例子,用来在一个刚好能容纳该文字的图像上绘制这段文字,并将其输出为 PNG:

<?php
$text = "Hello, PHP!";
$font = 3;

$charWidth = imagefontwidth($font);
$charHeight = imagefontheight($font);

$textWidth = strlen($text) * $charWidth;
$textHeight = $charHeight;

$image = imagecreate($textWidth, $textHeight);
$background = imagecolorallocate($image, 255, 255, 255); // 白色背景
$textColor = imagecolorallocate($image, 0, 0, 0); // 黑色文字

imagestring($image, $font, 0, 0, $text, $textColor);

// 输出图像
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>

将上述代码保存为 PHP 文件并通过服务器访问即可看到生成的图像。这个示例还可以进一步扩展,比如增加边距、居中对齐、或绘制多行文字。

4. 应用场景举例

这种方法常用于:

  • 动态生成验证码图片;

  • 创建带水印的图像;

  • 制作简单的签名条、用户名标签等;

  • 后台生成通知图像,如图标上加数字等。

例如,在站点 https://www.m66.net/gen.php?text=HelloPHP 上部署此类功能,就可以实现参数化的图像生成。

结语

使用 imagefontwidth()imagefontheight() 获取字体的单字符宽高,再结合字符串长度即可轻松计算出文本整体的像素区域大小。这种方法虽不如 TTF 字体灵活,但在对性能和简洁性有要求的场景中依然非常实用。希望这篇文章能帮助你更好地控制图像中文本的位置与排版。