|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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 所示:
[1] [2] [3] [4] [5] 下一页
基础这个东西,有人问学php需要任何基础不? |
|