您当时的方位:主页 > 言语编程 > PHP

PHP动态图画的创立

2014-08-18  www.codeforacause.net
  只需装置一些第三方的库文件并具有必定的几许常识,就能够运用PHP来创立和处理图画了。运用PHP创立动态图画是适当简略的一件工作。下面,笔者将具体介绍怎么完结。

  在运用根本的图画创立函数之前,需求装置GD库文件。假如要运用与JPEG有关的图画创立函数,还需求装置jpeg-6b,假如要在图画中运用Type 1型字体,则有必要装置t1lib。

  在树立图画创立环境之前,还需求做一些准备作业。首要,装置t1lib接着装置jpeg-6b,然后再装置GD库文件。在装置时必定要按这儿给定的次序进行装置,因为在编译GD入库时会用到jpeg-6b,假如没有装置jpeg-6b,在编译时就会犯错。

  在装置完这三个组件后,还需求重新装备一次PHP,这也是你对选用DSO方法装置PHP感到幸亏的当地之一。运转make clean,然后在当时的装备中增加下面的内容:

  --with-gd=[/path/to/gd]



  --with-jpeg-dir=[/path/to/jpeg-6b]



  --with-t1lib=[/path/to/t1lib]

  完结增加后履行make指令,然后再履行make install指令,重新启动Apache后运转phpinfo()来检查一下新的设置是否收效了。现在,咱们就能够开端图画创立作业了。

  依据所装置的GD库文件的版别将决议你是否能创立GIF或PNG格局的图形文件。假如装置的是gd-1.6或曾经的版别,能够运用GIF格局的文件但不能创立PNG格局,假如装置的是gd-1.6今后的版别,能够创立PNG文件但不能创立GIF格局的文件。

  创立一幅简略的图画也需求用到许多的函数,咱们将一步一步地进行阐明。

  鄙人面的比如中,咱们将创立一个PNG格局的图画文件,下面的代码是一个包括所创立的图画的MIME类型的头部:

  <? header ("Content-type: image/png");

  运用ImageCreate()创立一个代表空白图画的变量,这个函数要求以像素为单位的图画巨细的参数,其格局是ImageCreate(x_size, y_size)。假如要创立一个巨细为250×250的图画,就能够运用下面的句子:

  $newImg = ImageCreate(250,250);

  因为图画仍是空白的,因而你可能会期望用一些五颜六色来填充它。你需求首要运用ImageColorAllocate()函数用其RGB值为这种色彩指定一个姓名,这一函数的格局为ImageColorAllocate([image], [red], [green], [blue])。假如要界说天蓝色,能够运用如下的句子:

  $skyblue = ImageColorAllocate($newImg,136,193,255);

  接下来,需求运用ImageFill()函数用这种色彩填充这个图画,ImageFill()函数有几个版别,例如ImageFillRectangle()、ImageFillPolygon()等。为简略起见,咱们通过如下的格局运用ImageFill()函数:

  ImageFill([image], [start x point], [start y point], [color])



  ImageFill($newImg,0,0,$skyblue);

  最终,在图画树立后开释图画句柄和所占用的内存:

  ImagePNG($newImg);



  ImageDestroy($newImg); ?>

  这样,创立图画的悉数代码如下所示:

  <? header ("Content-type: image/png");



  $newImg = ImageCreate(250,250);



  $skyblue = ImageColorAllocate($newImg,136,193,255);



  ImageFill($newImg,0,0,$skyblue);



  ImagePNG($newImg);



  ImageDestroy($newImg);



  ?>

  假如把这个脚本文件保存为skyblue.php,并用浏览器拜访它,咱们会看到一个天蓝色的250×250的PNG格局的图画。

  咱们还能够运用图画创立函数对图画进行处理,例如把一个较大图画作成一个小图画:

  假定你有一幅图画,想从中裁剪出一个35×35巨细的图画。你所需求作的是创立一个35×35巨细的空白图画,创立一个包括本来图画的图画流,然后把一个通过调整巨细的本来的图画放到新的空白图画中。

  要完结这一使命的要害函数是ImageCopyResized(),它要求的格局如下所示:

  ImageCopyResized([new image handle],[original image handle],[new image X], [new Image Y], [original image X], [original image Y], [new image X], [new image Y], [original image X], [original image Y])。



  <? /* 发送一个头部,以便让浏览器知道该文件所包括的内容类型*/



  header("Content-type: image/png");



  /* 树立保存新图画高度和宽度的变量*/



  $newWidth = 35;



  $newHeight = 35;



  /* 树立给定高度和宽度的新的空白图画*/



  $newImg = ImageCreate($newWidth,$newHeight);



  /* 从本来较大的图画中得到数据*/



  $origImg = ImageCreateFromPNG("test.png");



  /*复制调整巨细后的图画,运用ImageSX()、ImageSY()得到本来的图画在X、Y方面上的巨细 */



  ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));



  /*创立期望得到的图画,开释内存 */



  ImagePNG($newImg);



  ImageDestroy($newImg); ?>



  假如把这一小段脚本保存为resized.php,然后用浏览器对它进行拜访,就会看到一个35×35巨细的PNG格局的图画。