当前位置: 首页 > 图文教程 > 网络编程 > PHP > 用PHP创建动态图形

PHP
《PHP设计模式介绍》第十三章 适配器模式
《PHP设计模式介绍》第十四章 动态记录模式
《PHP设计模式介绍》第十五章 表数据网关模式
《PHP设计模式介绍》第十六章 数据映射模式
《PHP设计模式介绍》第十七章 MVC 模式
Zend Framework 入门——快速上手
Zend Framework 入门——多国语言支持
Zend Framework 入门——错误处理
Zend Framework 入门——页面布局
详细介绍php5编程中的异常处理
PHP5 OOP编程中的代理与异常
PHP程序的常见漏洞攻击分析
PHP.MVC的模板标签系统
PHP教程:PHP编码书写规范
PHP开发大型项目的方法:OOP思想
php使用curl模拟用户登陆
php对gb编码动态转utf-8编码的几种方法评测
php设计模式介绍之章代理模式
“在phpMyAdmin使用用户口令登陆”补充
PHP入门速成

用PHP创建动态图形


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 142 ::
收藏到网摘: n/a

PHP有一个令人惊讶的能力——你可以利用它的服务器端脚本创建动态图形。这项功能的基础是GD库,它是由Thomas Boutell设计的ANSI C库,这个库支持除.GIF文件之外的绝大多数常见图形文件格式(不过该库的设计者许诺当LZW专利在2004年7月7日到期后就立即添加.GIF支持)。

PHP4.3以及它的更高版本集成了GD库。如果你使用的是老版本的PHP,你需要手工安装图形支持。这儿有许多与之有关的信息。


折线图
为了演示如何用PHP创建动态图形,我们建立一些自定义图形。第一个例子是画在网格上的折线图,如图A所示。

图A
Click to fullsize



我们把这个页面叫着grid.php(相关附件:清单A)。为了调用Web页动态产生的图形,你只需要访问这个PHP页,它将该图形传递到浏览器。IMG元素可以很好的完成这项工作。下面是实现这个功能的例子代码:

<imgsrc="grid.php" />

现在,我们开始编写用于创建图形的代码。下面是grid.php中源代码片断:

<?//添加图形的值$graphValues=array(0,80,23,11,190,245,50,80,111,240,55);


首先,我们定义图形的值。在这个例子中,图形值直接写到代码中的一个数组中,不过你可以很容易改写代码,让代码从XML文件、表格或者数据库中获取这些值。这些值的范围从0到250(以象素为单位的图形尺寸)。这些值将决定每个网格上线段的初始象素位置。如果你想使用数值0和100(用百分比表示),你只需把这些值乘以2.5来决定网格上的象素位置。

然后,我们发送一个PNG头并定义图像的高度和宽度:
// Define .PNG imageheader("Content-type: image/png");$imgWidth=250;$imgHeight=250;


我们发送一个图形头来“欺骗”浏览器,使它认为我们的PHP页面是一幅真正的图像,这样它才可以正确显示在屏幕上。服务器将以二进制数据流的形式把程序产生的信息发送到浏览器。


PNG(Portable Network Graphic,便携式网路图形)标准是一种无损的图形格式,它由于GIF的 LZW算法专利这一法律问题而在1995年提出来的。


现在,我们例化图形对象并定义我们在图形中用到的颜色:

//创建图像、定义颜色$image=imagecreate($imgWidth, $imgHeight);$colorWhite=imagecolorallocate($image, 255, 255, 255);$colorGrey=imagecolorallocate($image, 192, 192, 192);$colorBlue=imagecolorallocate($image, 0, 0, 255);


我们设置白色背景,灰色画框以及蓝色折线。你可以通过创建新变量并赋不同的RGB值来轻松的修改或者添加颜色。

我们可以用imageline函数来创建灰色画框,每次调用这个函数就画一条线:

//创建图像周围的框imageline($image, 0, 0, 0, 250, $colorGrey);imageline($image, 0, 0, 250, 0, $colorGrey);imageline($image, 249, 0, 249, 249, $colorGrey);imageline($image, 0, 249, 249, 249, $colorGrey);


这里用到了二维的x/y象素坐标。Imageline函数中的每一对值指定了图像的起点和终点。

为了实现网格线,我们在x坐标轴和y坐标轴上每隔25个象素画一条灰线:

//创建网格for ($i=1; $i<11; $i ){imageline($image, $i*25, 0, $i*25, 250, $colorGrey);imageline($image, 0, $i*25, 250, $i*25, $colorGrey);}


位置(0,0)表示网格的左上角,位置(250,250)表示右下角。每个坐标轴等分为10格,每格宽度是25个象素,即250个象素(图形的尺寸)。

为了创建折线图,我们只需循环的取出数组中的坐标值,按坐标画出每条线段的起点和终点:

//创建折线图for ($i=0; $i<10; $i ){imageline($image, $i*25, (250-$graphValues[$i]), ($i 1)*25, (250-$graphValues[$i 1]), $colorBlue);}


PHP将会自动在起点和终点之间填充蓝线。在这个简单的例子中只有10个值,但是扩展这个技术非常容易,如创建类似股指示意图那样的复杂图形等等。

最后,我们需要把这个图像输出到浏览器并清空服务器中保存图像的内存空间:
//输出图形并清楚内存中的图像imagepng($image);imagedestroy($image);?>



直方图
把上面用于创建折线图的基本程序修改后用于创建直方图(如图B所示)。

图B
Click to fullsize