在使用 PHP 进行图片处理时,GD 库提供了丰富的函数来实现各种效果。其中,imagettftext() 可以用来在图片上绘制 TrueType 字体的文字,而 imagecolorallocatealpha() 则可以分配一个带有透明度的颜色。当我们将这两个函数结合使用时,就能在图片上添加带有透明效果的文字。
本文将通过一个示例,演示如何实现这一效果。
首先,我们需要创建一个画布。这里使用 imagecreatetruecolor() 创建一张真彩色图片:
<?php
// 创建一张 400x200 的画布
$width = 400;
$height = 200;
$image = imagecreatetruecolor($width, $height);
// 为背景分配白色
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
imagecolorallocatealpha() 的第四个参数表示透明度,取值范围 0(完全不透明)到 127(完全透明)。
// 分配红色,50% 透明度(约等于 alpha = 63)
$red_alpha = imagecolorallocatealpha($image, 255, 0, 0, 63);
我们使用 imagettftext() 在画布上绘制文字。你需要提供一个 TTF 字体文件的路径。
// 字体文件路径
$font_path = __DIR__ . '/arial.ttf';
// 在画布上写入文字
imagettftext(
$image, // 图片资源
30, // 字体大小
0, // 角度
50, // X 坐标
100, // Y 坐标(基线位置)
$red_alpha, // 颜色(带透明度)
$font_path, // 字体文件路径
'Hello, m66.net!' // 要写入的文字
);
为了输出带透明度的 PNG 图片,需要设置透明色并输出为 PNG 格式。
// 打开 alpha 通道混合
imagesavealpha($image, true);
// 设置输出头
header('Content-Type: image/png');
// 输出图片
imagepng($image);
// 销毁资源
imagedestroy($image);
?>
确保服务器上安装了 GD 库,并且 php.ini 中启用了对 TrueType 字体的支持。
imagecolorallocatealpha() 的透明度值越接近 127,效果越透明。
使用 imagepng() 输出时,可以更好地保留透明通道。