引言

准备工作

在开始之前,请确保你的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类型后直接输出,或用imagejpegimagepngimagegif等函数保存到文件。

header("Content-type: image/jpeg");
imagejpeg($image);

或者

$outputPath = './output.jpg';
imagejpeg($image, $outputPath);

总结