A-A+

GD2类库与jpgraph类库

2012年02月05日 PHP技术文章 暂无评论 阅读 361 views 次

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&#91;check_checks&#93;=$new_number;       //将获取的随机数验证码写入到Session变量中
$num_image=imagecreate($image_width,$image_height);    //创建一个画布
imagecolorallocate($num_image,255,255,255);         //设置画布的颜色
for($i=0;$i<strlen($_SESSION&#91;check_checks&#93;);$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&#91;check_checks&#93;&#91;$i&#93;,$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();         //输出图像到浏览器
?>

标签:

给我留言