PHP GD库及jpgraph的安装与配置

来源:互联网 发布:linux系统分区 编辑:程序博客网 时间:2024/05/18 01:18

一、了解GD
在PHP中可以使用GD库对图像进行操作。DG库是一个开放的动态创建图像、源代码公开的函数库,可以从官主网站下载。目前GD库支持gif 、png 、jpeg、 wbmp和xbm等多种图像格式,通常用于对图像的处理。
二、在PHP中设定图像支持
GD库在PHP5中是被默认安装的,但要想激活GD库,必须修改php.ini文件。将该文件中的“;extension=php_gd2.dll”选项前的分号“;”删除。保存修改后的文件并重新启动apache服务器即可生效。
在成功加载GD2函数后,可以通过phpinfo()函数来获取GD2函数库的安装信息,验证GD库是否安装成功。
三、jpgraph的安装与配置
Jpgraph这个强大的绘图组件能根据用户的需要绘制任意图形。只需要提供数据,就能自动调用绘图函数的过程,把处理的数据输入自动绘制。Jpgraph提供了多种创建各种统计图,包括折线图、柱形图和饼形图等。Jpgraph是一个完全使用php语言编写的类库,并可以应用任何php环境中。
1jpgraph的安装
Jpgraph可以从其官方网站下载。注意:jpgraph支持php4.3.1以上和PHP5两种版本的图形库,选择合适的jpgraph下载。可以下载这样的版本使用:jpgraph-2.3
其安装步骤非常简单:
a)        将压缩包下的全部文件解压到一个文件夹中。如f:\appserv\www\jpgraph
b)       打开PHP的安装目录,编辑php.ini文件并修改其中的include_path参数,在其后增加前面的文件夹名,include_path=”.;f:\appserv\www\jpgraph”
c)        重新启动apache服务器即可生效。
2jpgraph的配置
Jpgraph提供了一个专门用于配置jpgraph类库的文件jpg-config.inc.php在使用jpgraph前,可以通过修改文本文件来完成jpgraph的配置。
jpg-config.inc.php文件的配置需要修改以下两项:
a)       支持中文的配置
Jpgraph支持的中文标准字体可以通过修改chinese_ttf_font的设置来完成。
Define(‘chinese_ttf_font’,’bkai00mp.ttf’);
b)       默认图片格式的配置
根据当前PHP环境中支持的图片格式来设置默认的生成图片的格式。Jpgraph默认图片格式的配置可以通过修改DEFAULT_GFORMAT的设置来完成。默认值auto表示jpgraph将依次按照png,gif和jpeg的顺序来检索系统支持的图片格式。
DEFINE(“DEFAULT_GFORMAT”,”auto”);
注意:如果用户使用的为jpgraph2.3版本,那么不需要重新进行配置。
四、图形图像的典型应用
   网页中如果没有丰富多彩的图形图像总是缺少生气。漂亮的图形图像能让整个网页看起来更富有吸引力,使许多文字难以表达的思想一目了然,并且可以清晰地表达出数据之间的关系。下面使用GD2函数可以进行各种图形图像处理。
1、            创建一个简单的图像
使用GD2函数库可以实现各种图形图像的处理。创建画布是使用GD2函数库来创建图像的第一步,无论创建什么样的图像,首先都需要创建一个画布,其他操作都将在这个画布个完成。在GD2函数库中创建画布,可以通过imagecreate()函数实现。
例:
<?php
$m=imagecreate(200,60);           //创建一个画布大小为200px宽度和60px高度
$w=imagecolorallocate($m,225,66,159);   //设置画布的背景颜色
imagegif($m);                        //输出图像
?>
php画图形只能输出乱码进行解决:
   在输出图片之前不能有任何输出的!就是在第一行进行编写,前面不能有别的HTML或是CSS等一些内容。
2、            使用GD2函数在照片上添加文字
PHP中的GD库支持中文,但必须要以UTF-8格式的参数来进行传递,如果使用imagestring()函数直接绘制中文字符串就会显示乱码,这是因为GD2对中文只能接收UTF-8编码格式,并且默认使用了英文的字体,所以只需要将显示的中文字符串进行转码,并设置绘制中文字符使用的字体,即可绘制中文字符。
例:
<?php
header("content-type:image/jpeg");       //定义输出图像的类型
$im=imagecreatefromjpeg("liumiao.jpg");//输入照片
$textcolor=imagecolorallocate($im,56,73,136);  //设置字体颜色
$fnt="c:/windows/fonts/simhei.ttf";      //定义字体
$motto=chr(0xe9).chr(0x95).chr(0xBF);   //定义输出字符串 UTF-8编码字体
imageTTFText($im,50,50,150,150,$textcolor,$fnt,$motto);   //写入到图片中
imagegif($im);        //建立gif图形
imageDestroy($im);   //结束图形,释放内存空间
?>
注意:一个汉字占3个字节,所以应该选择编辑汉字的总数乘以3个字节的内容。其中,0(零)x是必定的,im是指照片,50是字体的大小,50是文字的水平方向,150,150是文字的坐标值。应用该方法还可以制作电子相册。
3、 使用图像处理技术生成验证码
验证码功能的实现方法很多,有数字验证码,图形验证码和文字验证码等。
例:本页面的名称为1.php
<?php
session_start();
if($_POST[submit]!=""){
$yan=$_POST[yan];
if($yan==""){
    echo "<script>alert('请输入验证码!');window.location.href='1.php';</script>";
  }elseif($yan==$_SESSION[check]){
    echo "<script>alert('用户登录成功!');</script>";
}else{
    echo "<script>alert('验证码不正确!');window.location.href='1.php';</script>";
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=gb2312" />
<title>用户登录</title>
<scriptlanguage="javascript">
function check(biaodan){
     if(biaodan.user.value==""){
            alert("用户名不能为空!");
               biaodan.user.focus();
               return false;
         }
         if(biaodan.pwd.value==""){
            alert("密码不能为空!");
               biaodan.pwd.focus();
               return false;
         }
         if(biaodan.yan.value==""){
            alert("验证码不能为空!");
               biaodan.yan.focus();
               return false;
         }
        biaodan.submit();
  }
</script>
</head>
<body>
<form method="post"name="biaodan" action="">
     用户名:<input type="text"name="user" /><br /><br />
         密&nbsp;&nbsp;码:<inputtype="password" name="pwd" /><br /><br />
         验证码:<inputtype="text" name="yan" /><img src="2.php" alt="看不清,点击刷新" title="看不清,点击刷新"onclick="javascript:this.src='include/2.php?'+ Math.random()" ;"style="cursor:pointer;" /><br/><br />
         <input type="submit"name="submit" value="提交" />
         <input type="reset" value="重置"/>
  </form>
</body>
</html>
2.php
<?php
session_start();
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));  //dechex() 函数把十进制转换为十六进制。
}
$_SESSION[check]=$new_number;     //将获取的随机数存储到session变量中
$num_image=imagecreate($image_width,$image_height);   //创建一个画布
imagecolorallocate($num_image,255,200,170);   //设置画布颜色
for($i=0;$i<strlen($_SESSION[check]);$i++){  //依次读取session变量中的随机数
$fon=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,$fon,$x,$y,$_SESSION[check][$i],$color);  //水平输出字符
}
imagepng($num_image);       //生成一个png格式的图像
imagedestroy($num_image);   //释放图像资源  
?>
首先介绍一下此函数的用法:
定义和用法(php5)
microtime() 函数返回当前 Unix 时间戳和微秒数。返回的字符串的格式:msec sec
语法
microtime(get_as_float)
参数:get_as_float,如果给出了 get_as_float 参数并且其值等价于 TRUE,该函数将返回一个浮点数。
说明
本函数仅在支持 gettimeofday() 系统调用的操作系统下可用。
如果调用时不带可选参数,本函数以 "msecsec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。
代码:
<?php
echo microtime();
echo '<br />';
echo microtime(TRUE);
?>
浏览器显示结果:
0.45316500 1221228252
1221228252.45
我们看到microtime(TRUE),只返回了2位的小数。如果要输出更多位的微秒,需要函数number_format().看最后附1这个函数的用法。
补充:在PHP4下microtime()的用法 ,由于没有参数TRUE的用法,所以如果要得到浮点数,需要配合array_num()函数和explode()函数。
验证码相关技术文档:
    如:验证码看不清,单击刷新。
代码一:<imgsrc="include/getverifyimg.php" name="getcode"  border="1" alt="看不清,点击刷新" title="看不清,点击刷新"onclick="javascript:this.src='include/getverifyimg.php?'+Math.random()" ;" style="cursor:pointer;" />
代码二:<imgsrc="image/yanzheng.php" alt="看不清,点击换图片"id="img" style='cursor:poiinter;’ />
4、 使用柱形图统计图书月销售量
<?php
include("jpgraph/src/jpgraph.php");
include("jpgraph/src/jpgraph_bar.php");
//以上是引用柱形图对象所在的文件
$datay=array(160,180,203,289,405,408,489,299,166,187,105);  //定义数组
//创建画布
$graph=new graph(600,300,"auto");
$graph->SetScale("textlin");
$graph->yaxis->scale->SetGrace(20);
//创建画布阴影
$graph->SetShadow();
//设置显示区左,右,上,下距边线的距离,单位为像素
$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("2011年PHP图书销量");
//设置X坐标轴文字
$a=array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
$graph->xaxis->setticklabels($a);
//设置字体
$graph->title->setfont(FF_SIMSUN);
$graph->xaxis->setfont(FF_SIMSUN);
//输出矩形图表
$graph->stroke();
?>
5、 使用拆线图统计图书月销售额
<?php
             include("jpgraph/src/jpgraph.php");
       include ("jpgraph/src/jpgraph_line.php");     
//引用折线图LinePlot类文件
              $datay= array(8320,9360,14956,17028,13060,15376,25428,16216,28548,18632,22724,28460);           //填充的数据   
       $graph = new Graph(600,300,"auto");                                                   //创建画布
       $graph->img->SetMargin(50,40,30,40);                                             //设置统计图所在画布的位置,左边距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();                                                                               //输出图像
?>
6、 使用3D饼形图统计各类商品的年销额比率
<?php
include_once("jpgraph/src/jpgraph.php");
include_once("jpgraph/src/jpgraph_pie.php");
include_once("jpgraph/src/jpgraph_pie3d.php");
$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();                                    //输出图像到浏览器
?>
0 0