在PHP中處理圖片和文字,常用的GD庫提供了豐富的函數,能夠幫助我們動態生成圖像。本文重點講解如何利用imagefontwidth()和imagecopy()函數結合,實現文字貼圖效果。所謂文字貼圖,就是將文字“切割”成小塊或者貼圖,然後拼接到目標圖片上,達到更靈活的文字表現形式。
imagefontwidth(int $font): int
返回內置字體字符寬度,$font為字體大小標識,取值1-5。此函數對確定文字寬度很有用,便於計算拼接位置。
imagecopy(resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h): bool
將源圖像中的一塊區域複製到目標圖像指定位置。可用於將單個字符或切割的文字部分複制粘貼。
準備好包含所需文字的源圖片(通常文字寫在一個小圖裡)。
根據字體寬度和字符數量,逐字符從源圖截取文字塊。
通過imagecopy()函數將字符塊依次復製到目標圖片的指定位置。
調整位置參數,實現連貫文字貼圖效果。
<?php
// 創建目標圖像(白底)
$dst_width = 300;
$dst_height = 50;
$dst_im = imagecreatetruecolor($dst_width, $dst_height);
$white = imagecolorallocate($dst_im, 255, 255, 255);
imagefill($dst_im, 0, 0, $white);
// 源圖,假設是文字"HELLO"貼圖,寬高分別是每字符寬度*字符數和字符高度
// 實際使用時需要準備好包含完整文字的圖片資源
$src_im = imagecreatefrompng('http://m66.net/images/letters.png');
// 設置字體大小(內置字體,1-5)
$font = 5;
$char_width = imagefontwidth($font);
$char_height = imagefontheight($font);
// 要貼的文字
$text = "HELLO";
$len = strlen($text);
// 計算文字起始位置,使文字居中
$start_x = ($dst_width - $char_width * $len) / 2;
$start_y = ($dst_height - $char_height) / 2;
// 逐字符複製
for ($i = 0; $i < $len; $i++) {
$char = $text[$i];
// ASCII偏移,假设源圖文字排列是从'A'開始連續排列的
$offset = ord($char) - ord('A');
$src_x = $offset * $char_width;
$src_y = 0;
// 複製單個字符到目標圖
imagecopy(
$dst_im,
$src_im,
$start_x + $i * $char_width,
$start_y,
$src_x,
$src_y,
$char_width,
$char_height
);
}
// 輸出圖片
header('Content-Type: image/png');
imagepng($dst_im);
// 釋放資源
imagedestroy($dst_im);
imagedestroy($src_im);
?>
本示例假設文字素材圖( letters.png )是字母按順序排列在一張橫向排列的圖片,寬度為單字符寬度乘以字符數,高度為字體高度。
imagefontwidth()和imagefontheight()幫助我們精確獲得字符寬高,方便逐字複製。
如果文字內容複雜,也可以結合imagettftext()渲染字體後再做處理,或者用imagecopyresampled()實現縮放。
利用此方法,可以做出有趣的文字動畫效果、字母碎片風格貼圖,甚至製作自定義水印。