在使用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 字體靈活,但在對性能和簡潔性有要求的場景中依然非常實用。希望這篇文章能幫助你更好地控製圖像中文本的位置與排版。