文章教程

19.2.4在图像上输出文字

9/17/2020 9:26:54 PM 人评论 次浏览

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-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所示。

图 19-6 在图像中显示中文

教程类别