在使用 PHP 进行图像处理时,内建的 GD 库提供了诸如 imagestring()、imagettftext() 等函数来绘制文本。而对于位图字体(bitmap fonts),我们可以使用 imagefontwidth() 和 imagefontheight() 来获取字体的尺寸,以便正确计算字符在图像中的位置、对齐方式或文本包裹边界。
本文将介绍这两个函数的用法,并示范如何搭配使用它们,计算出一段文本的整体宽高,确保你能在图像中精准地布局文本内容。
int imagefontwidth(int $font);
该函数返回给定字体编号对应的单个字符的宽度(像素)。
int imagefontheight(int $font);
该函数返回给定字体编号对应的单个字符的高度(像素)。
PHP 的 GD 库提供了 5 种内建字体(编号从 1 到 5),编号越大字体越大。
要获取一整段字符串绘制后所需的像素区域大小,我们只需将单字符的宽高与字符串长度进行组合计算:
$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!" 这段文字所占的像素宽高。
下面是一个完整的例子,用来在一个刚好能容纳该文字的图像上绘制这段文字,并将其输出为 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 文件并通过服务器访问即可看到生成的图像。这个示例还可以进一步扩展,比如增加边距、居中对齐、或绘制多行文字。
这种方法常用于:
动态生成验证码图片;
创建带水印的图像;
制作简单的签名条、用户名标签等;
后台生成通知图像,如图标上加数字等。
例如,在站点 https://www.m66.net/gen.php?text=HelloPHP 上部署此类功能,就可以实现参数化的图像生成。
使用 imagefontwidth() 和 imagefontheight() 获取字体的单字符宽高,再结合字符串长度即可轻松计算出文本整体的像素区域大小。这种方法虽不如 TTF 字体灵活,但在对性能和简洁性有要求的场景中依然非常实用。希望这篇文章能帮助你更好地控制图像中文本的位置与排版。