使用PHP5创建图形巧妙方法(二),使用PHP5创建图形巧妙方法(二)
【 tulaoshi.com - PHP 】
添加维数
  我们的第一个需求  提供图形对象的能力  已经满足了,现在应该开始满足第二个需求了:可以使用一个 z 值将一个对象放到其他对象的上面或下面。
  我们可以将每个 z 值当作是原始图像的一个面。所画的元素是按照 z 值从最小到最大的顺序来画的。例如,让我们画两个图形元素:一个红色的圆和一个黑色的方框。圆的 z 值是 100,而黑方框的 z 值是 200。这样会将圆放到方框之后,如图 3 所示:
  图3. 不同 z 值的面
  我们只需要修改一下 z 值就可以将这个红圆放到黑方框之上。要实现这种功能,我们需要让每个 GraphicsObject 都具有一个 z() 方法,它返回一个数字,就是 z 值。由于您需要创建不同的图形对象(Line、Oval 和 Rectangle),您还需要创建一个基本的类 BoxObject,其他 3 个类都使用它来维护起点和终点的坐标、z 值和这个对象的颜色(请参看图 4)。
  图 4. 给系统添加另外一维:z 值
  这个图形库的新代码如清单 3 所示:
  清单 3. 可以处理 z 信息的图形库
         
 <?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 );   abstract public function z(); } abstract class BoxObject extends GraphicsObject {   protected $color;   protected $sx;   protected $sy;   protected $ex;   protected $ey;   protected $z;   public function __construct( $z, $color, $sx, $sy, $ex, $ey )   {     $this-z = $z;     $this-color = $color;     $this-sx = $sx;     $this-sy = $sy;     $this-ex = $ex;     $this-ey = $ey;   }   public function z() { return $this-z; } } class Line extends BoxObject {   public function render( $ge )   {     imageline( $ge-getGraphicObject(),       $this-sx, $this-sy,       $this-ex, $this-ey,       $ge-getColor( $this-color ) );   } } class Rectangle extends BoxObject {   public function render( $ge )   {     imagefilledrectangle( $ge-getGraphicObject(),       $this-sx, $this-sy,       $this-ex, $this-ey,       $ge-getColor( $this-color ) );   } } class Oval extends BoxObject {   public function render( $ge )   {     $w = $this-ex - $this-sx;     $h = $this-ey - $this-sy;     imagefilledellipse( $ge-getGraphicObject(),       $this-sx + ( $w / 2 ),       $this-sy + ( $h / 2 ),       $w, $h,       $ge-getColor( $this-color ) );   } } ?                         来源:http://www.tulaoshi.com/n/20160129/1490391.html
看过《使用PHP5创建图形巧妙方法(二)》的人还看了以下文章 更多>>