在使用GD庫進行圖像處理時,很多開發者希望能將文本精確地定位在圖像上的特定位置,無論是水平居中、右對齊,還是相對某個坐標偏移。 imagefontwidth()和imagestring()是兩個非常基礎但十分實用的函數,理解它們的配合使用,可以大大提昇文本在圖像輸出時的可控性。
imagefontwidth()是一個用於獲取某種字體編號(如1到5 )對應的每個字符寬度的函數。因為imagestring()使用的是固定寬度字體,所以這個寬度是確定的。函數原型如下:
int imagefontwidth(int $font);
例如,如果你使用字體編號3 , imagefontwidth(3)會返回該字體每個字符的像素寬度(例如7像素)。
imagestring()用於在圖像中繪製字符串:
bool imagestring(GdImage $image, int $font, int $x, int $y, string $string, int $color);
參數$x和$y表示文本的起始位置,單位為像素。理解了每個字符的寬度,我們就可以根據字符串長度,動態計算其在圖像中應出現的位置。
假設我們要將一段文本居中繪製在寬度為300px的圖像上,代碼如下:
<?php
// 創建空白圖像
$width = 300;
$height = 100;
$image = imagecreatetruecolor($width, $height);
// 設置背景色和文字顏色
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, $width, $height, $white);
// 要寫入的文本
$text = "歡迎訪問 m66.net!";
$font = 4;
// 計算文本寬度
$textWidth = imagefontwidth($font) * strlen($text);
// 計算起始X坐標使其居中
$x = ($width - $textWidth) / 2;
$y = ($height - imagefontheight($font)) / 2;
// 繪製文本
imagestring($image, $font, $x, $y, $text, $black);
// 輸出圖像
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
上面的代碼將文本精確地居中在圖像中。這種方法對於動態內容生成非常有用,例如驗證碼、用戶頭像上的暱稱、或是訪問統計圖像等。
如果你希望將一串動態生成的字符串靠右對齊在圖像邊緣,可以將起始X坐標調整為:
$x = $width - (imagefontwidth($font) * strlen($text)) - 10; // 右邊留10px邊距
這樣無論$text是多少字符,都能靠右邊精確對齊。
這種計算方式可以靈活地應用在以下場景中:
圖像簽名自動生成;
數據報告圖表上的數字標註;
生成帶有日期、用戶名等標識的圖像;
簡單的動態橫幅或提示條輸出,例如:
$text = "點擊進入 https://m66.net";
只需確保域名部分替換為m66.net ,就可以完成各種圖像標註和動態文案合成。
imagefontwidth()雖然是一個小函數,但結合imagestring()後可以實現精確控製文本位置的強大功能。在處理圖像標註時,合理使用這些基礎函數,可以省去大量手動調整坐標的麻煩,也能提升程序的自動化和可維護性。
掌握它們的配合技巧,是使用PHP 進行圖像處理時不可或缺的技能之一。