绘制普通文字
函数:imagestring()
imagestring ( resource $image , int $font, int $x, int $y, string $s, int $col) : bool
imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
使用imagestring来绘制字体,有点事非常简单。但缺陷也非常明显,字体大小只有1到5,且不支持中文字符。
<?php /**绘制文字**/ $imgHandler = imagecreatetruecolor(100,100); // 绘制矩形并填充 $borderCol = imagecolorallocate($imgHandler, 23, 32, 200); imagefilledrectangle($imgHandler, 0, 0, 99, 99, $borderCol); // 绘制水平方向文字 $strColor = imagecolorallocate($imgHandler, mt_rand(0,100), mt_rand(0, 100), mt_rand(0, 100)); imagestring($imgHandler, 5,1, 45, 'hello world', $strColor); // 垂直方向文字 imagestringUp($imgHandler, 5,45, 99, 'hello world', $strColor); header("Content-Type:image/png"); imagepng($imgHandler); imagedestroy($imgHandler);
使用字体库绘制文字
使用imagestring来绘制文字,非常简单。但有几个缺陷。首先:它不能绘制中文,另外,使用imagestring绘制出的文字不会太大。
这里我们使用imagettftext来绘制文字,imagettftext除了能设置字体大小外,还可以给字体设置倾斜角度。
使用前,我们需要找一些ttf格式的字体。在windows系统下的C:\Windows\Fonts目录,有许多字体。
<?php /* 使用imagettftext向图像正中写文字 */ $im = imagecreatetruecolor(300, 300); $bgColor = imagecolorallocate($im, 222,222,222); imagefill($im,0, 0, $bgColor); $size = 30; $angle = 0; $font = 'D:\wwwroot\stdphp\img\font/msyhbd.ttf'; $text = '大圣到此一游'; //获取文字信息 $info = imagettfbbox($size, $angle, $font, $text); $minx = min($info[0], $info[2], $info[4], $info[6]); $maxx = max($info[0], $info[2], $info[4], $info[6]); $miny = min($info[1], $info[3], $info[5], $info[7]); $maxy = max($info[1], $info[3], $info[5], $info[7]); ///* 计算文字初始坐标和尺寸 */ $x = $minx; $y = abs($miny); $w = $maxx - $minx; $h = $maxy - $miny; /* 随机文字颜色 */ $textColor = imagecolorallocate($im, mt_rand(0,150), mt_rand(0,150), mt_rand(0,150)); imagettftext($im, $size, $angle, (300 - $w) / 2 + $x, (300 - $h) / 2 + $y, $textColor, $font, $text); header("Content-type:image/png"); imagepng($im); imagedestroy($im);
绘制的图片效果如下:
Atas ialah kandungan terperinci PHP图片处理(中)- 绘制文字. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!