仓酷云

标题: PHP编程:用PHP创立静态图形 [打印本页]

作者: 深爱那片海    时间: 2015-2-16 00:29
标题: PHP编程:用PHP创立静态图形
PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。创立|静态|图形   PHP有一个使人惊奇的才能――你可以使用它的办事器端剧本创立静态图形。这项功效的基本是GD库,它是由Thomas Boutell设计的ANSI C库,这个库撑持除.GIF文件以外的绝大多半罕见图形文件格局(不外该库的设计者允诺当LZW专利在2004年7月7日到期后就当即添加.GIF撑持)。

PHP4.3和它的更高版本集成了GD库。假如你利用的是老版本的PHP,你需求手工装置图形撑持。这儿有很多与之有关的信息。


折线图
为了演示若何用PHP创立静态图形,咱们创立一些自界说图形。第一个例子是画在网格上的折线图,如图A所示。

图A




咱们把这个页面叫着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 image
header("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



(相干附件:清单B)这段法式与咱们下面用来画折线图的代码略有分歧。Imagefilledrectangle函数创立两种直方块――深色的直方块暗示$graphValues数组中保留的值,而淡色直方块则用于填充深色方块之间的空地:

//创立直方图
for ($i=0; $i<10; $i++){
imagefilledrectangle($image, $i*25, (250-$graphValues[$i]), ($i+1)*25, 250, $colorDarkBlue);
imagefilledrectangle($image, ($i*25)+1, (250-$graphValues[$i])+1, (($i+1)*25)-5, 248, $colorLightBlue);
}


留意CPU的负荷
当你在办事器端创立这些图形时,你需求细心思索这个成绩:CPU负荷。假如你在Web端有太多如许的静态图片发生义务,你能够会发明招致功能下落。

更庞杂的用法
本文所罗列的例子仅仅是个出发点。假如你想失掉有关PHP图形库的更多信息,请检查PHP手册上的的图形函数网页。

英文版地址:http://builder.com.com/5100-6371-5092227.html
  培训的第一阶段,学习的是HTML/CSS/JavaScript基础。
作者: 乐观    时间: 2015-2-16 05:01
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
作者: 小魔女    时间: 2015-3-5 00:00
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 山那边是海    时间: 2015-3-5 09:32
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
作者: 活着的死人    时间: 2015-3-6 13:42
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 精灵巫婆    时间: 2015-3-6 14:23
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 小妖女    时间: 2015-3-13 05:09
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 深爱那片海    时间: 2015-3-20 13:33
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: admin    时间: 2015-3-22 22:09
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
作者: 再见西城    时间: 2015-3-25 05:40
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
作者: 爱飞    时间: 2015-3-27 02:10
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者: 简单生活    时间: 2015-3-30 13:43
当然这种网站的会员费就几十块钱。
作者: 变相怪杰    时间: 2015-3-31 00:31
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 爱飞    时间: 2015-4-1 14:11
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 柔情似水    时间: 2015-4-6 00:10
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 海妖    时间: 2015-4-9 15:35
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
作者: 飘飘悠悠    时间: 2015-4-12 18:46
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 若天明    时间: 2015-4-12 18:54
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 蒙在股里    时间: 2015-4-12 21:18
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 小女巫    时间: 2015-4-13 06:00
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 只想知道    时间: 2015-4-18 03:36
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2