当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

12.2图形图像的典型应用

9/17/2020 9:40:31 PM 人评论

12.2图形图像的典型应用

12.2 图形图像的典型应用

下面讲述图形图像的经典使用案例。

12.2.1 创建一个简单的图像

使用gd2库文件,就像使用其他库文件一样。由于它是PHP的内置库文件,不需要在PHP文件中用include等函数再行调用。

以下实例介绍图像的创建,具体操作步骤如下。

01 先在根目录下建立一个文件夹,命名为phpimage。

02 在phpimage下建立phpimagecreate.php,输入以下代码并保存。

  <html>
  <head>
  <title> </title>
  </head>
  <body>
  <?php
     $ysize =300;
     $xsize =200;
     $theimage = imagecreatetruecolor($xsize,$ysize);
     $color1 = imagecolorallocate($theimage, 255,255,255);
     $color2 = imagecolorallocate($theimage, 8,2,133);
     imagefill($theimage, 0, 0,$color2);
     imageline($theimage,0,0,$xsize,$ysize, $color1);
     header('content-type: image/png');
     imagepng($theimage);
     imagedestroy($theimage);
  ?>
  </body>
  </html>

03 运行phpimagecreate.php,结果如图12-2所示。

image

图12-2 phpimagecreate.php页面效果

【案例分析】

(1)imagecreatetruecolor()函数用来创建图片画布。它需要两个参数,一个是X轴的大小,一个是Y轴的大小。$xsize =200;$ysize =300;分别设定了这两参数的大小。$theimage = imagecreatetruecolor($xsize,$ysize);使用这两个参数生成了画布,并且赋值为$theimage。

(2)imagecolorallocate()函数用来在画布上选定颜色。$color1 = imagecolorallocate ($theimage, 255,255,255);是在生成好的$theimage画布上选定RGB值为(255,255,255)的颜色(白色)并且把它赋值给$color1。$color2 = imagecolorallocate($theimage, 8,2,133);同理在生成好的$theimage画布上选定RGB值为(8,2,133)的颜色(一种蓝色)并且把它赋值给$color2。

(3)imagefill()函数是对画布填充颜色的命令。它需要三方面的参数。imagefill($theimage, 0, 0,$color2);中$theimage是画布对象,(0, 0)是填充颜色时X轴和Y轴的起始坐标,$color2是填充所采用的颜色。

(4)imageline()函数是一个在画布内画线的函数。imageline($theimage,0,0,$xsize,$ysize, $color1);中$theimage是画布对象,(0, 0)是画线时X轴和Y轴的起始坐标,($xsize,$ysize)是画线时X轴和Y轴的终点坐标,$color2是画线所采用的颜色。

(5)把生成好的图片输出到页面。header('content-type: image/png');是定义输出的文件是一个image图片,它的具体的格式是PNG格式。

(6)imagepng($theimage);是生成$theimage画布中的所有内容,为PNG格式的图片。

(7)当一切完成后imagedestroy($theimage);用来清除$theimage对象,以清空内存资源。

这里只是把图片输出到页面,那么如果需要图片文件呢?

以下实例介绍图像文件的创建方法,具体操作步骤如下。

01 在phpimage文件夹下建立phpimagecreatefile.php,输入以下代码并保存。

  <html>
  <head>
  <title> </title>
  </head>
  <body>
  <?php
     $ysize =200;
     $xsize =300;
     $theimage = imagecreatetruecolor($xsize,$ysize);
     $color2 = imagecolorallocate($theimage, 8,2,133);
     $color3 = imagecolorallocate($theimage, 230,22,22);
     imagefill($theimage, 0, 0,$color2);
     imagearc($theimage,100,100,150,200,0,270,$color3);
     imagejpeg($theimage,"newimage.jpeg");
     header('content-type: image/png');
     imagepng($theimage);
     imagedestroy($theimage);
  ?>
  </body>
  </html>

02 运行phpimagecreatefile.php,结果如图12-3所示。

image

图12-3 phpimagecreatefile.php页面效果

同时在phpimage文件夹下生成一个名为newimage.jpeg的图片,其内容与页面显示相同。

【案例分析】

(1)此程序前面的部分是创建画布和选择颜色。与前面的案例相同。

(2)imagearc($theimage,100,100,150,200,0,270,$color3);语句是使用imagearc()函数在画布上创建一个弧线。它的参数分为以下几个部分。$theimage为目标画布,(100,100)为弧线中心点的x、y坐标,“150,200”为弧线的宽度和高度,“0,270”为顺时针画弧线的起始度数和终点度数(0~360°),$color3为画弧线所使用的颜色。

(3)imagejpeg()函数是生成JPEG格式的图片的函数。imagejpeg($theimage,"newimage. jpeg");把画布对象$theimage及其所有操作,生成为一个名为newimage.jpeg的JPEG图片文件,并且直接存储在当前路径下。

(4)同时,header('content-type: image/png');和imagepng($theimage);向页面输出了PNG格式的图片。

(5)最后清除对象,释放资源。

12.2.2 使用GD2函数在照片上添加文字

上面是完全创建一个图片。如果想要修改一个图片,则需要先从图片文件中读取数据。

以下实例介绍图像文件的读取和修改,具体操作步骤如下。

01 在phpimage文件夹下建立readimagefileaddtext.php,输入以下代码并保存。

  <html>
  <head>
  <title> </title>
  </head>
  <body>
  <?php
     $theimage = imagecreatefromjpeg('newimage.jpeg');
     $color1 = imagecolorallocate($theimage, 255,255,255);
     $color3 = imagecolorallocate($theimage, 230,22,22);
     imagestring($theimage,5,60,100,'Text added to this image.',$color1);
     header('content-type: image/png');
     imagepng($theimage);
     imagepng($theimage,'textimage.png');
     imagedestroy($theimage);
  ?>
  </body>
  </html>

02 运行readimagefileaddtext.php,结果如图12-4所示。

image

图12-4 readimagefileaddtext.php页面效果

同时在phpimage文件夹下生成一个名为newimage.jpeg的图片,其内容与页面显示相同。

【案例分析】

(1)imagecreatefromjpeg('newimage.jpeg');语句中imagecreatefromjpeg()函数从当前路径下读取newimage.jpeg图形文件,并且传递给$theimage变量作为对象,以待操作。

(2)选取颜色后,imagestring($theimage,5,60,100,'Text added to this image.',$color1);语句中的imagestring()函数向对象图片添加字符串'Text added to this image.'。这里面的参数中$theimage为对象图片。“5”为字体类型,这个字体类型的参数从1到5代表不同的字体。“60,100”为字符串添加的起始x、y坐标。'Text added to this image.'为要添加的字符串,现在的情况下只支持asc字符。$color1为字的颜色。

(3)header('content-type: image/png');和imagepng($theimage);语句共同处理了输出到页面的PNG图片。之后imagepng($theimage,'textimage.png');语句就创建文件名为textimage.png的PNG图片,并保存在当前路径下。

12.2.3 使用TrueType字体处理中文生成图片

字体处理在很大程度上是PHP图形处理经常要面对的问题。imagestring()函数默认的字体是十分有限的。这就要进入字体库文件。而TrueType字体是字体中极其常用的格式。比如在Windows下,打开C:\WINDOWS\Fonts目录,会出现很多字体文件,其中绝大部分是TrueType字体,如图12-5所示。

image

图12-5 系统中的字体

PHP使用GD2库,在Windows环境下,需要给出TrueType字体所在的文件夹路径。例如,在文件开头使用以下语句:

  putenv('GDFONTPATH=C:\WINDOWS\Fonts');

使用TrueType字体也可以直接使用imagettftext()函数。它是使用ttf字体的imagestring()函数。它的格式为:

  imagettftext(图片对象,字体大小,文字显示角度,起始x坐标,起始y坐标,文字颜色,字体名称,
文字信息)

另外一个很重要的问题,就是GD库中的imagettftext()函数默认是无法支持中文字符,并添加到图片上去的。这是因为GD库的imagettftext()函数对于字符的编程采用的是UTF-8的编程格式,而简体中文的默认格式为GB2312。

以下就介绍这样的一个例子,具体操作步骤如下。

01 把C:\WINDOWS\Fonts下的字体文件simhei.ttf复制到C:/wamp/www/phpimage下。

02 在phpimage文件夹下建立zhtext.php,输入以下代码并保存。

  <html>
  <head>
  <title> </title>
  </head>
  <body>
  <?php
     $ysize =200;
     $xsize =300;
     $theimage = imagecreatetruecolor($xsize,$ysize);
     $color2 = imagecolorallocate($theimage, 8,2,133);
     $color3 = imagecolorallocate($theimage, 230,22,22);
     imagefill($theimage, 0, 0,$color2);
     $fontname='simhei.ttf';
     $zhtext = "这是一个把中文用黑体显示的图片。";
     $text = iconv("GB2312", "UTF-8", $zhtext);
     imagettftext($theimage,12,0,20,100,$color3,$fontname,$text);
     header('content-type: image/png');
     imagepng($theimage);
     imagedestroy($theimage);
  ?>
  </body>
  </html>

03 运行zhtext.php,运行结果如图12-6所示。

image

图12-6 zhtext.php页面效果

【案例分析】

(1)imagefill($theimage, 0, 0,$color2);之前的语句是创建画布、填充颜色的。

(2)$fontname='simhei.ttf';语句确认了当前目录下的黑体字的ttf文件,并且把路径赋值给$fontname变量。

(3)$zhtext中,中文字符的编程为GB2312。使用$text =iconv("GB2312", "UTF-8", $zhtext);语句把$zhtext中的中文编程转换为UTF-8,并赋值给$text变量。

(4)imagettftext($theimage,12,0,20,100,$color3,$fontname,$text);语句按照imagettftext()函数的格式分别确认了参数。$theimage为目标图片,“12”为字符的大小,“0”为显示的角度,“20,100”为字符串显示的初始x和y坐标值。$fontname为已经设定的黑体,$text为已经转换为UTF-8格式的中文字符。

相关教程

共有条评论 网友评论

验证码: 看不清楚?