PHP教程之利用 PHP 5.0创立图形的奇妙办法
HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。创立|图形 本文将展现若何利用 PHP 构建面向对象的图形层。利用面向对象的体系可以用来构建庞杂的图形,这比利用尺度 PHP 库中所供应的根基功效来构建图形复杂良多。我将图形编纂法式分为两类:一类是画图法式,使用这类法式可以一个像素一个像素地绘制图象;别的一类是制图法式,这类法式供应了一组对象,例如线、椭圆和矩形,您可使用这些对象来组分解一幅大图象,例如 JPEG。画图法式十分合适停止像素级的掌握。然而关于营业图形来讲,制图法式是对照好的体例,由于大局部图形都是由矩形、线和椭圆构成的。
PHP 内置的制图根基操作与画图法式十分相似。它们关于绘制图象来讲功效十分壮大;然而假如您但愿本人的图象是一组对象纠合时,这就不太合适了。本文将向您展现若何在 PHP 图形库的基本上构建一个面向对象的图形库。您将利用 PHP V5 中供应的面向对象的扩大。
具有面向对象的图形撑持以后,您的图形代码就十分轻易了解和保护了。您能够还需求从一种单一的图形源将图形分解为多品种型的前言:Flash 片子、SVG 等等。
方针
创立一个图形对象库包含 3 个次要的方针:
从根基操作切换到对象上
它不利用 imageline、imagefilledrectangle 和其他图形函数,这个库应当供应一些对象,例如 Line、Rectangle 和 Oval,它们可以用来制造图象。它应当还可以撑持构建更大的庞杂对象或对对象停止分组的功效。
可以停止 z 值排序
制图法式让画家可以在画面外表上高低挪动图形对象。这个库应当可以撑持将一个对象放到其他对象前后的功效:它利用了一个 z 值,用来界说对象从制图立体入手下手的高度。z 值越大的对象被画得越晚,也就呈现在那些 z 值较小的对象之上。
供应 viewport 的转换
凡是,数据的坐标空间与图象的坐标空间是分歧的。PHP 中的图形根基操作是对图象的坐标立体停止操作的。这个图形库应当撑持 viewport 的标准,如许您就能够在一个法式员熟习的坐标体系中指定图形了,而且可以主动停止伸缩来顺应任何图象的巨细。
因为这里有良多特征,您将一步步地编写代码来展现这些代码若何不休增添功效。
基本常识
让咱们起首来看一个图形情况对象和一个名为 GraphicsObject 的接口,它是利用一个 Line 类完成的,功效就是用来画线。UML 如图 1 所示。
图 1. 图形情况和图形对象接口
GraphicsEnvironment 类中保留了图形对象和一组色彩,还包含宽度和高度。saveAsPng 办法担任将以后的图象输入到指定的文件中。
GraphicsObject 是任何图形对象都必需利用的接口。要入手下手利用这个接口,您所需求做的就是利用 render 办法来画这个对象。它是由一个 Line 类完成的,它使用 4 个坐标:入手下手和停止的 x 值,入手下手和停止的 y 值。它还有一个色彩。当挪用 render 时,这个对象从 sx,sy 到 ex,ey 画一条由名字指定的色彩的线。
这个库的代码如清单 1 所示。
清单 1. 根基的图形库
<?php class GraphicsEnvironment { public $width; public $height; public $gdo; public $colors = array(); public function __construct( $width, $height ) { $this->width = $width; $this->height = $height; $this->gdo = imagecreatetruecolor( $width, $height ); $this->addColor( "white", 255, 255, 255 ); imagefilledrectangle( $this->gdo, 0, 0, $width, $height, $this->getColor( "white" ) ); } public function width() { return $this->width; } public function height() { return $this->height; } public function addColor( $name, $r, $g, $b ) { $this->colors[ $name ] = imagecolorallocate( $this->gdo, $r, $g, $b ); } public function getGraphicObject() { return $this->gdo; } public function getColor( $name ) { return $this->colors[ $name ]; } public function saveAsPng( $filename ) { imagepng( $this->gdo, $filename ); } } abstract class GraphicsObject { abstract public function render( $ge ); } class Line extends GraphicsObject { private $color; private $sx; private $sy; private $ex; private $ey; public function __construct( $color, $sx, $sy, $ex, $ey ) { $this->color = $color; $this->sx = $sx; $this->sy = $sy; $this->ex = $ex; $this->ey = $ey; } public function render( $ge ) { imageline( $ge->getGraphicObject(), $this->sx, $this->sy, $this->ex, $this->ey, $ge->getColor( $this->color ) ); } } ?>
测试代码如清单 2 所示:
下一页
基础这个东西,有人问学php需要任何基础不? 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 做为1门年轻的语言,php一直很努力。 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
页:
[1]
2