当前位置: 首页> 最新文章列表> 结合 imagettftext() 添加透明文字

结合 imagettftext() 添加透明文字

M66 2025-05-17

在使用 PHP 进行图片处理时,GD 库提供了丰富的函数来实现各种效果。其中,imagettftext() 可以用来在图片上绘制 TrueType 字体的文字,而 imagecolorallocatealpha() 则可以分配一个带有透明度的颜色。当我们将这两个函数结合使用时,就能在图片上添加带有透明效果的文字。

本文将通过一个示例,演示如何实现这一效果。

步骤 1:创建画布

首先,我们需要创建一个画布。这里使用 imagecreatetruecolor() 创建一张真彩色图片:

<?php
// 创建一张 400x200 的画布
$width = 400;
$height = 200;
$image = imagecreatetruecolor($width, $height);

// 为背景分配白色
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);

步骤 2:分配带透明度的文字颜色

imagecolorallocatealpha() 的第四个参数表示透明度,取值范围 0(完全不透明)到 127(完全透明)。

// 分配红色,50% 透明度(约等于 alpha = 63)
$red_alpha = imagecolorallocatealpha($image, 255, 0, 0, 63);

步骤 3:绘制文字

我们使用 imagettftext() 在画布上绘制文字。你需要提供一个 TTF 字体文件的路径。

// 字体文件路径
$font_path = __DIR__ . '/arial.ttf';

// 在画布上写入文字
imagettftext(
    $image,        // 图片资源
    30,           // 字体大小
    0,            // 角度
    50,           // X 坐标
    100,          // Y 坐标(基线位置)
    $red_alpha,   // 颜色(带透明度)
    $font_path,   // 字体文件路径
    'Hello, m66.net!' // 要写入的文字
);

步骤 4:输出图片

为了输出带透明度的 PNG 图片,需要设置透明色并输出为 PNG 格式。

// 打开 alpha 通道混合
imagesavealpha($image, true);

// 设置输出头
header('Content-Type: image/png');

// 输出图片
imagepng($image);

// 销毁资源
imagedestroy($image);
?>

小贴士

  • 确保服务器上安装了 GD 库,并且 php.ini 中启用了对 TrueType 字体的支持。

  • imagecolorallocatealpha() 的透明度值越接近 127,效果越透明。

  • 使用 imagepng() 输出时,可以更好地保留透明通道。