使用 PHP 创建图形的巧妙方法
我将图形编辑程序分为两类:一类是绘图程序,利用这种程序可以一个像素一个像
素地绘制图像;另外一类是制图程序,这种程序提供了一组对象,例如线、椭圆和矩形,
您可以使用这些对象来组合成一幅大图像,例如 JPEG。绘图程序非常适合进行像素级的
控制。但是对于业务图形来说,制图程序是比较好的方式,因为大部分图形都是由矩形、
线和椭圆组成的。
PHP 内置的制图基本操作与绘图程序非常类似。它们对于绘制图像来说功能非常强
大;但是如果您希望自己的图像是一组对象集合时,这就不太适合了。本文将向您展示如
何在 PHP
图形库的基础上构建一个面向对象的图形库。您将使用 PHP V5 中提供的面向
对象的扩展。
具有面向对象的图形支持之后,您的图形代码就非常容易理解和维护了。您可能还需
要从一种单一的图形源将图形合成为多种类型的媒介:Flash 电影、SVG 等等。
目标
创建一个图形对象库包括 3 个主要的目标:
从基本操作切换到对象上
它不使用 imageline、imagefilledrectangle 以及其他图形函数,这个库应该
提供一些对象,例如 Line、Rectangle 和 Oval,它们可以用来制作图像。它应该还可
以支持构建更大的复杂对象或对对象进行分组的功能。
可以进行 z 值排序
制图程序让画家可以在画面表面上上下移动图形对象。这个库应该可以支持将一个对
象放到其他对象前后的功能:它使用了一个 z 值,用来定义对象从制图平面开始的高度。
z
值越大的对象被画得越晚,也就出现在那些 z 值较小的对象之上。
提供 viewport 的转换
通常,数据的坐标空间与图像的坐标空间是不同的。PHP 中的图形基本操作是对图
像的坐标平面进行操作的。这个图形库应该支持 viewport 的规范,这样您就可以在一个
程序员熟悉的坐标系统中指定图形了,并且可以自动进行伸缩来适应任何图像的大小。
由于这里有很多特性,您将一步步地编写代码来展示这些代码如何不断增加功能。
基础知识