引言
准备工作
在开始之前,请确保你的PHP环境中已经安装并启用了GD库。你可以通过以下代码检查GD库是否已安装:
if (!function_exists('imagecreatetruecolor')) {
die('GD库未安装或不支持TrueType文本');
}
步骤详解
1. 加载原始图片
$imagePath = './example.jpg';
$image = imagecreatefromjpeg($imagePath);
2. 设置字体颜色、大小和样式
使用imagecolorallocate分配颜色,并使用GD的内置字体或自定义字体。
$fontColor = imagecolorallocate($image, 255, 255, 255); // 白色
$fontSize = 5; // 字体大小
3. 处理文字换行
$text = "这是一段很长的文字,需要自动换行。";
$width = imagesx($image);
$lineHeight = ImageFontHeight($fontSize);
$words = explode(' ', $text);
$lines = [];
foreach ($words as $word) {
$testStr = $lines ? implode(' ', $lines) . ' ' . $word : $word;
$testImg = imagecreatefromstring($testStr);
$testWidth = imagesx($testImg);
if ($testWidth > $width) {
array_push($lines, $word);
} else {
array_pop($lines);
array_push($lines, $word);
break;
}
imagedestroy($testImg);
}
// 合并换行后的文字
$text = implode("\n", $lines);
4. 在图片上绘制文字
$y = $lineHeight;
foreach (explode("\n", $text) as $line) {
imagettftext($image, $fontSize, 0, 10, $y, $fontColor, './arial.ttf', $line);
$y += $lineHeight;
}
5. 输出或保存合成图片
使用header设置正确的MIME类型后直接输出,或用imagejpeg、imagepng、imagegif等函数保存到文件。
header("Content-type: image/jpeg");
imagejpeg($image);
或者
$outputPath = './output.jpg';
imagejpeg($image, $outputPath);