使用PHP和GD进行图形处理(一)
时间:2007-02-17 来源:PHP爱好者
因为越来越多的web 站点开始结合数据库在他们的部分设计中,我们能够使用在数据库中采集的数据来
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
显示统计结果。今天有很多的web 站点都有意使用某些民意测验或投票应用。在表格中显示数据是一件事,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
但是 创建一个数据的图形则就是另外一回事了。当然,我们可以使用表格将可用的条状图形接在一起显示,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
但是对于线形图或饼状图又如何做呢?PHP 具有一系列的图形函数,这些函数允许我们创建图形,让我们看
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
一看这些函数对于使用和创建一些图形有什么好处。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
然而要紧记,在PHP中的图形函数要求你的系统安装了GD图形库。你可以在www.boutell.com/gd/找到,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
还可以得到一些关于在你的系统上如何安装的一些指导。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
注意:我写这篇文章时是在Red Hat Linux 6.2机器上,然后是在Windows 2000机器上结束它的 。在Red
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
Hat我运行的是PHP和MySQL的最新版本,但是在Windows上我不得不回到MySQL 3.21.29和PHP 3.0.11版本上,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
因为它有我要处理的所有的东西 -- SQL和PHP的运行都不需要作修改。在这里让我们不要将整个事情放在交
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
叉平台上,好吗?
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
为了保持数据简单,并且允许我们集中注意力在创建图形上,我使用了一个小的假定的数据集 -- 一个
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
国际公司今年前六个月的销售指标。我根据的是一个办事处位于伦敦和另一个在亚特兰大。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
Month 1 Month 2 Month 3 Month 4 Month 5 Month 6
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
伦敦 325 345 400 390 370 320
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
亚特兰大 300 280 270 300 350 410
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
前六个月的销售指标
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
然后我将数据输入到一个MySQL数据库中。我在下面包括了一个数据的卸出:
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# MySQL dump 7.1
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# Host: localhost Database: graphing
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#--------------------------------------------------------
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# Server version 3.22.32
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# Table structure for table 'sales'
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
CREATE TABLE sales (
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
g_id int(11) DEFAULT '0' NOT NULL auto_increment,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
g_month tinyint(4) DEFAULT '0' NOT NULL,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
g_team tinytext NOT NULL,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
g_num int(11) DEFAULT '0' NOT NULL,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
PRIMARY KEY (g_id)
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# Dumping data for table 'sales'
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (1,1,'London',325);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (2,1,'Atlanta',300);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (3,2,'London',345);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (4,2,'Atlanta',280);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (5,3,'London',400);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (6,3,'Atlanta',270);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (7,4,'London',390);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (8,4,'Atlanta',300);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (9,5,'London',370);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (10,5,'Atlanta',350);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (11,6,'London',320);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (12,6,'Atlanta',410);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
我的数据库叫做graphing,包含数据的表叫做sales。我将月份当做一个整数存在 g_month字段中。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
在我们开始绘图之前,先学一些基础知识,看一下PHP是如何创建一个图像。我们需要做的第一件事就
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
是告诉浏览器它正在得到一个图像和所得到图像的类型:
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
Header( "Content-type: image/gif");
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
即然浏览器知道它正在获取一个GIF 图像了,我们可以开始创建图形了。首先我们需要创建一个将用来
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
绘图的空白的画布。ImageCreate函数可以做到这一点。ImageCreate将返回一个图像的标识符,并且需要告
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
诉函数用象素计算的画布有多大,x(宽度)与y(高度)。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
$image = imagecreate(200,200);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
现在我们得到了一个200像素乘200像素的可用来绘图的空白画布。下一步是创建将要用在图像中的一些
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
颜色。为了做到这一点我们需要使用ImageColorAllocate函数,还有颜色的RGB值。ImageColorAllocate 将
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
返回一个我们刚创建的颜色标识。我们将在画布上绘图时使用颜色标识。ImageColorAllocate的工作方式是
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
我们需要为所处理的每一个图像分配一个颜色 -- 所以如果我们创建3个GIF并且在每一个上面使用红色,我
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
们应该分配红色3次(一次为一个GIF)。我将分配一个名为$maroon的颜色,给定红色值为100,绿色为0 和
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
兰色为0。同时我将同样创建白色。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
$maroon = ImageColorAllocate($image,100,0,0);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
$white = ImageColorAllocate($image,255,255,255);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
即然我们已经得到了颜色,就可以画点什么了。第一件事情要叫的就是将画布白色涂成白色。函数
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageFilledRectangle将在画布上画一个矩形,并且用指定的颜色进行填充。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageFilledRectangle($image,0,0,200,200,$white);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
告诉ImageFilledRectangle的第一件事就是(同样用于所有的图像函数)哪一个图像是我们正在处理的 ,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
所以传给它$image标识。然后它需要知道x和y坐标来开始画矩形(0,0 -- 左上角)和结束矩形的坐标( 200,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
200 -- 画布的右下角)。最后告诉它的事情就是在矩形内填充的颜色,这个例子为$maroon。现在我们可以
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
开始在白色背景上绘图了。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageRectangle($image,10,10,190,190,$maroon);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageFilledRectangle($image,50,50,150,150,$maroon);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageRectangle工作完全与ImageFilledRectangle同样的方式,除了它不使用颜色填充矩形以外。一旦
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
我们画完了,就可以输出图形了 --
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageGIF($image);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
然后清除我们存在内存中的图像。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageDestroy($image);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
这就是我们得到的:
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
然而,它还不是一个要求的图形。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
(未完待续)
非常全面的一个php技术网站,php 爱好者站 http://www.phpfans.net 有相当丰富的文章和源代码.
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
显示统计结果。今天有很多的web 站点都有意使用某些民意测验或投票应用。在表格中显示数据是一件事,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
但是 创建一个数据的图形则就是另外一回事了。当然,我们可以使用表格将可用的条状图形接在一起显示,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
但是对于线形图或饼状图又如何做呢?PHP 具有一系列的图形函数,这些函数允许我们创建图形,让我们看
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
一看这些函数对于使用和创建一些图形有什么好处。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
然而要紧记,在PHP中的图形函数要求你的系统安装了GD图形库。你可以在www.boutell.com/gd/找到,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
还可以得到一些关于在你的系统上如何安装的一些指导。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
注意:我写这篇文章时是在Red Hat Linux 6.2机器上,然后是在Windows 2000机器上结束它的 。在Red
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
Hat我运行的是PHP和MySQL的最新版本,但是在Windows上我不得不回到MySQL 3.21.29和PHP 3.0.11版本上,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
因为它有我要处理的所有的东西 -- SQL和PHP的运行都不需要作修改。在这里让我们不要将整个事情放在交
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
叉平台上,好吗?
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
为了保持数据简单,并且允许我们集中注意力在创建图形上,我使用了一个小的假定的数据集 -- 一个
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
国际公司今年前六个月的销售指标。我根据的是一个办事处位于伦敦和另一个在亚特兰大。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
Month 1 Month 2 Month 3 Month 4 Month 5 Month 6
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
伦敦 325 345 400 390 370 320
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
亚特兰大 300 280 270 300 350 410
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
前六个月的销售指标
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
然后我将数据输入到一个MySQL数据库中。我在下面包括了一个数据的卸出:
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# MySQL dump 7.1
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# Host: localhost Database: graphing
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#--------------------------------------------------------
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# Server version 3.22.32
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# Table structure for table 'sales'
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
CREATE TABLE sales (
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
g_id int(11) DEFAULT '0' NOT NULL auto_increment,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
g_month tinyint(4) DEFAULT '0' NOT NULL,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
g_team tinytext NOT NULL,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
g_num int(11) DEFAULT '0' NOT NULL,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
PRIMARY KEY (g_id)
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
# Dumping data for table 'sales'
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
#
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (1,1,'London',325);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (2,1,'Atlanta',300);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (3,2,'London',345);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (4,2,'Atlanta',280);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (5,3,'London',400);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (6,3,'Atlanta',270);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (7,4,'London',390);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (8,4,'Atlanta',300);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (9,5,'London',370);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (10,5,'Atlanta',350);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (11,6,'London',320);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
INSERT INTO sales VALUES (12,6,'Atlanta',410);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
我的数据库叫做graphing,包含数据的表叫做sales。我将月份当做一个整数存在 g_month字段中。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
在我们开始绘图之前,先学一些基础知识,看一下PHP是如何创建一个图像。我们需要做的第一件事就
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
是告诉浏览器它正在得到一个图像和所得到图像的类型:
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
Header( "Content-type: image/gif");
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
即然浏览器知道它正在获取一个GIF 图像了,我们可以开始创建图形了。首先我们需要创建一个将用来
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
绘图的空白的画布。ImageCreate函数可以做到这一点。ImageCreate将返回一个图像的标识符,并且需要告
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
诉函数用象素计算的画布有多大,x(宽度)与y(高度)。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
$image = imagecreate(200,200);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
现在我们得到了一个200像素乘200像素的可用来绘图的空白画布。下一步是创建将要用在图像中的一些
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
颜色。为了做到这一点我们需要使用ImageColorAllocate函数,还有颜色的RGB值。ImageColorAllocate 将
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
返回一个我们刚创建的颜色标识。我们将在画布上绘图时使用颜色标识。ImageColorAllocate的工作方式是
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
我们需要为所处理的每一个图像分配一个颜色 -- 所以如果我们创建3个GIF并且在每一个上面使用红色,我
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
们应该分配红色3次(一次为一个GIF)。我将分配一个名为$maroon的颜色,给定红色值为100,绿色为0 和
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
兰色为0。同时我将同样创建白色。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
$maroon = ImageColorAllocate($image,100,0,0);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
$white = ImageColorAllocate($image,255,255,255);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
即然我们已经得到了颜色,就可以画点什么了。第一件事情要叫的就是将画布白色涂成白色。函数
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageFilledRectangle将在画布上画一个矩形,并且用指定的颜色进行填充。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageFilledRectangle($image,0,0,200,200,$white);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
告诉ImageFilledRectangle的第一件事就是(同样用于所有的图像函数)哪一个图像是我们正在处理的 ,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
所以传给它$image标识。然后它需要知道x和y坐标来开始画矩形(0,0 -- 左上角)和结束矩形的坐标( 200,
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
200 -- 画布的右下角)。最后告诉它的事情就是在矩形内填充的颜色,这个例子为$maroon。现在我们可以
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
开始在白色背景上绘图了。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageRectangle($image,10,10,190,190,$maroon);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageFilledRectangle($image,50,50,150,150,$maroon);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageRectangle工作完全与ImageFilledRectangle同样的方式,除了它不使用颜色填充矩形以外。一旦
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
我们画完了,就可以输出图形了 --
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageGIF($image);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
然后清除我们存在内存中的图像。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
<?php
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
ImageDestroy($image);
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
?>
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
这就是我们得到的:
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
然而,它还不是一个要求的图形。
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
www.chinaitpower.comDoxS0KuGmcX89oEPMHgjrmUeC
(未完待续)
非常全面的一个php技术网站,php 爱好者站 http://www.phpfans.net 有相当丰富的文章和源代码.
相关阅读 更多 +