19.2.4 在图像上输出文字
通过函数imagestring()可以在图像上书写一段文本,代码19-4在代码19-3的基础上,在图像上显示一段文字,完整代码如下所示。
代码19-4 在图像上显示文字19-4.php
01 <?php
02 $width=200;
03 $height=300;
04
05 $img=imagecreatetruecolor($width,$height)or die("不支持GD图像处理");//创建图像
06 $line_color=imagecolorallocate($img,255,255,255);
07
08 imageline($img,0,40,200,40,$line_color);//绘制直线
09 imageline($img,0,260,200,260,$line_color);//绘制直线
10 imagestring($img,5,0,60,"It's time to learn PHP!",$line_color);//显示文字
11
12 imagepng($img);
13 imagedestroy($img);
14 ?>
【代码解析】这段代码使用函数imagestring()向图像书写一段文字,如代码第10行所示。该函数第1个参数是图像标识符,第2个参数是字体大小,第3、4个参数是表示文字书写的起始坐标。第5个参数就是要向图像书写的文本字符串,第6个参数是文字的颜色。这段代码的执行结果如图19-5所示。
代码19-4在图像上输出了一串英文文字,如果要输出中文字符,就不是那么容易了。如果将函数imagestring()的第4个参数传入中文字符串,执行程序后会显示乱码,读者可以亲自实践一下。
如果在图像上显示中文,需要将中文字符做转换,转换成16进制的字符。这里介绍一种比较简捷的方法来获取汉字的16进制字符。首先在Windows记事本中输入中文字符,保存时按UTF-8编码保存。之后通过UltraEdit打开该文件,在工具栏中选择“切换Hex模式”按钮,即按16进制格式查看文件内容,就可以看到中文字符的16进制编码。例如,在UltraEdit的Hex模式下,可以看到“西游记”3字的16进制编码如下所示。
E8 A5 BF E6 B8 B8 E8 AE B0
在程序中,还需要使用函数chr()返回这些16进制编码所表示的单个字符。在图像上显示中文使用的函数是imagettftext(),该函数输出中文时需要用TrueType字体向图像写入文本。代码19-5演示了在图像中显示中文字符。
代码19-5 在图像中显示中文字符19-5.php
01 <?php
02 $width=200;
03 $height=300;
04
05 $img=imagecreatetruecolor($width,$height)or die("不支持GD图像处理");//创建图像
06 $line_color=imagecolorallocate($img,255,255,255);
07 $font_type="C://WINDOWS//Fonts//SIMLI.TTF";//获取TrueType字体,采用隶书字体
08
09 //“西游记”3个字的16进制字符
10 $cn_char1=chr(0xE8).chr(0xA5).chr(0xBF);
11 $cn_char2=chr(0xE6).chr(0xB8).chr(0xB8);
12 $cn_char3=chr(0xE8).chr(0xAE).chr(0xB0);
13
14 //“吴承恩著”4个字的16进制字符
15 $cn_str=
chr(0xE5).chr(0x90).chr(0xB4).chr(0xE6).chr(0x89).chr(0xBF).chr(0xE6).chr(0x81).chr(0xA9);
16 $cn_str.="".chr(0xE8).chr(0x91).chr(0x97);
17
18 imageline($img,0,40,200,40,$line_color);//绘制直线
19 imageline($img,0,260,200,260,$line_color);//绘制直线
20
21 //竖排显示“西游记”3字
22 imagettftext($img,30,0,10,80,$line_color,$font_type,$cn_char1);
23 imagettftext($img,30,0,10,120,$line_color,$font_type,$cn_char2);
24 imagettftext($img,30,0,10,160,$line_color,$font_type,$cn_char3);
25
26 //横排显示“吴承恩著”4字
27 imagettftext($img,15,0,90,254,$line_color,$font_type,$cn_str);
28
29 imagepng($img);
30 imagedestroy($img);
31 ?>
【代码解析】代码第7行获取TrueType字体,在Windows XP中,其所在目录为C:\WINDOWS\Fonts,这行代码指定图像中显示中文所采用的字体为隶书。代码第10至12行,分别指定了3个中文字符,这里使用函数chr()获取16进制编码(这里也是ASCII编码)所代表的单个字符,同样的道理,代码15~16行,指定了其他几个中文字符。代码第22行,使用函数imagettftext()向图像写入文本,该函数的语法如下所示。
imagettftext(resource$mage,float$size,float$angle,int$x,int$y,int
$color,string$fontfile,string$text)
函数imagettftext()的第1个参数是图像标识符,第2个参数是字体大小,第3个参数是文本显示角度,如果该参数为0,表示从左向右读的文本。第4、5个参数表示的第一个字符字体基线的坐标。第6个参数表示字体颜色。第7个参数表示显示图像文字时所采用的TrueType字体。最后一个参数是要显示的文本内容。
这段代码的执行结果如图19-6所示。
共有条评论 网友评论