GD2类库与jpgraph类库
12.1 在 PHP 中加载 GD 库
GD 库在 PHP5 中是默认安装的,但要激活 GD 库,必须修改 PHP.ini 文件,将该文件中的";extension=php_gd2.dll"选项前的分号";"删除,保存修改后的文件并重新启动 Apache 服务器即可生效。
12.2 Jpgraph 的安装与配置
安装:从其官方 http://www.aditus.nu/jpgraph/ 下载。(1) 将压缩包下的全部文件解压到一个文件夹中如 d:\wamp\www\jpgraph\。(2) 打开 PHP 的安装目录,编辑 PHP.ini 文件并修改其中的 include_path 参数,在其后增加前面的文件名,如 ;include_path = ".;d:\wamp\www\jpgraph\" 。(3) 重新启动 Apache 服务器即可生效。
支持中文的配置: Jpgraph 支持的中文标准字体可以通过修改 jpg-config.inc.php 文件中的CHINESE_TTF_FONT 的设置来完成。DEFINE('CHINESE_TTF_FONT','bkai00mp.ttf');
12.3 图形图像的典型应用
12.3.1 创建一个简单的图像:在 GD2函数库中创建画布,可以通过 imagecreate()函数实现。
<?php $im = imagecreate(200, 60); $white = imagecolorallocate($im, 225, 225, 159); imagegif($im); ?>
12.3.2 使用 GD2 函数在照片上添加文字
<?php header("content-type:image/jpeg"); //定义输出为图像类型 $im=imagecreatefromjpeg("images/2.jpg"); //载入照片 $textcolor=imagecolorallocate($im,56,73,136);//设置字体颜色为蓝色,值为RGB颜色值 $fnt="c:/windows/fonts/STZHONGS.TTF"; //定义字体 $motto=iconv("gb2312","utf-8","长白山天池"); //定义输出字体串 imagettftext($im,220,0,480,340,$textcolor,$fnt,$motto); //写TTF文字到图中 imagejpeg($im); //建立JPEG图形 imagedestroy($im); //结束图形,释放内存空间 ?>
说明:主要使用 imageTTFText()函数输出文字到照片中。其中,$sm 是指照片,220是字体大小,0 是文字水平方向,480、340 是文字的坐标值,$textcolor 是文字的颜色,$fnt 是字体,$motto 是照片文字。
12.3.3 使用图像处理技术生成验证码
创建一个 checks.php文件,在该文件中使用 GD2 函数创建一个 4 位的验证码
<?php session_start(); //初始化Session变量 header("content-type:image/png"); //设置创建图像的格式 $image_width=70; //设置图像宽度 $image_height=18; //设置图像高度 srand(microtime()*100000); //设置随机数的种子 for($i=0;$i<4;$i++){ //循环输出一个4位的随机数 $new_number.=dechex(rand(0,15)); } $_SESSION[check_checks]=$new_number; //将获取的随机数验证码写入到Session变量中 $num_image=imagecreate($image_width,$image_height); //创建一个画布 imagecolorallocate($num_image,255,255,255); //设置画布的颜色 for($i=0;$i<strlen($_SESSION[check_checks]);$i++){ //循环读取Session变量中的验证码 $font=mt_rand(3,5); //设置随机的字体 $x=mt_rand(1,8)+$image_width*$i/4; //设置随机字符所在位置的X坐标 $y=mt_rand(1,$image_height/4); //设置随机字符所在位置的Y坐标 $color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)); //设置字符的颜色 imagestring($num_image,$font,$x,$y,$_SESSION[check_checks][$i],$color); //水平输出字符 }imagepng($num_image); //生成PNG格式的图像 imagedestroy($num_image); //释放图像资源 ?>
12.3.4 使用柱形图统计图书月销售量
<?php include ("jpgraph/jpgraph.php"); include ("jpgraph/jpgraph_bar.php"); //引用柱形图对象所在的文件 $datay=array(160,180,203,289,405,488,489,408,299,166,187,105); //定义数组 $graph = new Graph(600,300,"auto"); //创建画布 $graph->SetScale("textlin");$graph->yaxis->scale->SetGrace(20); $graph->SetShadow(); //创建画布阴影//设置统计图所在画布的位置,左边距40、右边距30、上边距30、下边距40,单位为像素 $graph->img->SetMargin(40,30,30,40);$bplot = new BarPlot($datay); //创建一个矩形的对象 $bplot->SetFillColor('orange'); //设置柱形图的颜色 $bplot->value->Show(); //设置显示数字 $bplot->value->SetFormat('%d'); //在柱形图中显示格式化的图书销量 $graph->Add($bplot); //将柱形图添加到图像中 $graph->SetMarginColor("lightblue"); //设置画布背景色为淡蓝色 $graph->title->Set("《php5从入门到精通》2007年销量统计"); //创建标题//设置X坐标轴文字 $a=array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"); $graph->xaxis->SetTickLabels($a); //设置X轴 $graph->title->SetFont(FF_SIMSUN); //设置标题的字体 $graph->xaxis->SetFont(FF_SIMSUN); //设置X轴的字体 $graph->Stroke(); //输出图像 ?>
12.3.5 使用折线图统计图书月销售额
<?php include ("jpgraph/jpgraph.php"); include ("jpgraph/jpgraph_line.php"); //引用折线图LinePlot类文件 $datay = array(8320,9360,14956,17028,13060,15376,25428,16216,28548,18632,22724,28460); //定义数组 $graph = new Graph(600,300,"auto"); //创建画布 //设置统计图所在画布的位置,左边距50、右边距40、上边距30、下边距40,单位为像素 $graph->img->SetMargin(50,40,30,40); $graph->img->SetAntiAliasing(); //设置折线的平滑状态 $graph->SetScale("textlin"); //设置刻度样式 $graph->SetShadow(); //创建画布阴影 $graph->title->Set("2007年《php5从入门到精通》图书月销售额折线图"); //设置标题 $graph->title->SetFont(FF_SIMSUN,FS_BOLD); //设置标题字体 $graph->SetMarginColor("lightblue"); //设置画布的背景颜色为淡蓝色 $graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD); //设置Y轴标题的字体 $graph->xaxis->SetPos("min");$graph->yaxis->HideZeroLabel();$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');$a=array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");//X轴 $graph->xaxis->SetTickLabels($a); //设置X轴 $graph->xaxis->SetFont(FF_SIMSUN); //设置X坐标轴的字体 $graph->yscale->SetGrace(20); $p1 = new LinePlot($datay); //创建折线图对象 $p1->mark->SetType(MARK_FILLEDCIRCLE); //设置数据坐标点为圆形标记 $p1->mark->SetFillColor("red"); //设置填充的颜色 $p1->mark->SetWidth(4); //设置圆形标记的直径为4像素 $p1->SetColor("blue"); //设置折线颜色为蓝色 $p1->SetCenter(); //在X轴的各坐标点中心位置绘制折线 $graph->Add($p1); //在统计图上绘制折线 $graph->Stroke(); //输出图像 ?>
12.3.6 使用 3D 饼形图统计各类商品的年销售额比率
<?php include_once ("jpgraph/jpgraph.php"); include_once ("jpgraph/jpgraph_pie.php"); include_once ("jpgraph/jpgraph_pie3d.php"); //引用3D饼形图PiePlot3D对象所在的类文件 $data = array(266036,295621,335851,254256,254254,685425); //定义数组 $graph = new PieGraph(540,260,'auto'); //创建画布 $graph->SetShadow(); //设置画布阴影 $graph->title->Set("应用3D饼形图统计2007年商品的年销售额比率");//创建标题 $graph->title->SetFont(FF_SIMSUN,FS_BOLD); //设置标题字体 $graph->legend->SetFont(FF_SIMSUN,FS_NORMAL); //设置图例字体 $p1 = new PiePlot3D($data); //创建3D饼形图对象 $p1->SetLegends(array("IT数码","家电通讯","家居日用","服装鞋帽","健康美容","食品烟酒")); $targ=array("pie3d_csimex1.php?v=1","pie3d_csimex1.php?v=2","pie3d_csimex1.php?v=3","pie3d_csimex1.php?v=4","pie3d_csimex1.php?v=5","pie3d_csimex1.php?v=6"); $alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); $p1->SetCSIMTargets($targ,$alts);$p1->SetCenter(0.4,0.5); //设置饼形图所在画布的位置 $graph->Add($p1); //将3D饼形图添加到图像中 $graph->StrokeCSIM(); //输出图像到浏览器 ?>