«
PHP常见图形操作 玩转图像函数库

时间:2008-5-31    作者:Deri    分类: 分享


   <p>  PHP自4.3版本开始,捆绑了自己的GD2库,用户可以自己下载并设置.如果要查看自己的php版本是否支持gd模块(支持JPEG,PNG,WBMP但不再支持GIF),如下方式是一种方法:</p><code>if(!function_exists('imagecreate')) {<br />die('本服务器不支持GD模块');<br />}</code><p>  如果不支持的话,如何配置 ? 下载gd模块的dll文件,修改php.ini,重启服务器即可.</p><p>  以下简称PHP作图为PS.</p><p>  当您打算 PS的话,应该完成如下如下步骤,这是必经的.</p><p>  1:创建基本PS对象(我假设为$image),填充背景(默认黑),以后的全部ps操作都是基于这个背景图像的.</p><p>  2:在$image上作图.</p><p>  3:输出这个图像.</p><p>  4:销毁对象,清除使用内存.</p><p>  首先,我们来认识几个常用的函数,这些函数在php手册里面都有详细介绍,此处大体引用下.</p><p>  resource imagecreate ( int x_size, int y_size )</p><p>  imagecreate() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的空白图像。</p><p>  此函数基本同imagetruecolor($width,$height).</p><p>  int imagecolorallocate ( resource image, int red, int green, int blue )</p><p>  imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。image 参数是 imagecreatetruecolor() 函数的返回值。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate() 必须被调用以创建每一种用在 image 所代表的图像中的颜色。</p><p>  bool imagefill ( resource image, int x, int y, int color )</p><p>  imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。</p>
<p> </p>

   <p>  bool imageline ( resource image, int x1, int y1, int x2, int y2, int color )</p><p>  imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。</p><p>  bool imagestring ( resource image, int font, int x, int y, string s, int col )</p><p>  imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。</p><p>  array imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text )</p><p>  本函数比较重要,参数较多,此处不再列出,它主要是写字到图像上,和上面的函数类似,但必前者强大.</p><p>  bool imagefilltoborder ( resource image, int x, int y, int border, int color )</p><p>  imagefilltoborder() 从 x,y(图像左上角为 0, 0)点开始用 color 颜色执行区域填充,直到碰到颜色为 border 的边界为止。【注:边界内的所有颜色都会被填充。如果指定的边界色和该点颜色相同,则没有填充。如果图像中没有该边界色,则整幅图像都会被填充。】</p><p>  bool imagefilledellipse ( resource image, int cx, int cy, int w, int h, int color )</p><p>  imagefilledellipse() 在 image 所代表的图像中以 cx,cy(图像左上角为 0, 0)为中心画一个椭圆。w 和 h 分别指定了椭圆的宽和高。椭圆用 color 颜色填充。如果成功则返回 TRUE,失败则返回 FALSE。</p><p>  输出图像数据:imagepng($image[,$filename])</p><p>  例一:输出蓝色背景和交叉白线的图形</p><code><?php<br />$width=35;<br />$height=35;<br />//创建对象<br />$image=imagecreate($width,$height);<br />//提取颜色<br />$color_white=imagecolorallocate($image,255,255,255);//白色<br />$color_blue=imagecolorallocate($image,0,0,108);//蓝色<br />imagefill($image,0,0,$color_blue);<br />//作图<br />//线宽<br />imagesetthickness($image,3);<br />imageline($image,0,0,$width,$height ,$color_white);<br />imageline($image,$width,0,0,$height ,$color_white);<br />//发送对象至头<br />header('content-type:image/png');<br />imagepng($image);<br />/*<br />//发送对象至文件<br />$filename="ex1.png";<br />imagepng($image,$filename);<br />*/<br />//销毁对象<br />imagedestroy($image);<br />?></code><p>  输出图象:<img src="http://img.ddvip.com/2007_08/1188063187_ddvip_3648.png" onclick="get_larger(this)" alt="PHP常见图形操作 玩转图像函数库" /></p>
 <p> </p>

   <p>  例二: 阴阳图</p><code><?php<br />$width=400;<br />$height=400;<br />$image=imagecreatetruecolor($width,$height);<br />//提取颜色<br />$color_black=imagecolorallocate($image,0,2,0);//<br />$color_white=imagecolorallocate($image,255,255,255);//白色<br />$color_blue=imagecolorallocate($image,0,0,108);//蓝色<br />$color_red=imagecolorallocate($image,151,0,4);//红色<br />$color_my=imagecolorallocate($image,192,192,255);//背景<br />$color_temp=imagecolorallocate($image,199,199,199);//背景<br />//作图<br />imagefill($image,0,0,$color_white);<br />//第一个是大圆<br />imagefilledarc ($image,$width/2,$height/2,$height,$height,0,360,$color_blue,IMG_ARC_PIE);<br />//两个小圆<br />imagefilledellipse ($image,$width/2,$height/4 ,$height/2,$height/2,$color_red);<br />imagefilledellipse ($image,$width/2,$height/4 * 3,$height/2,$height/2,$color_blue);<br />/*imagefilledellipse -- 画一椭圆并填充*/<br />imagefilledarc ($image,$width/2,$height/2,$height,$height,-90,90,$color_red,IMG_ARC_PIE);<br />imagefilledellipse ($image,$width/2,$height/4 * 3,$height/2,$height/2,$color_blue);<br />//发送对象至头<br />header('content-type:image/png');<br />imagepng($image);<br />/*<br />//发送对象至文件<br />$filename="ex1.png";<br />imagepng($image,$filename);<br />*/<br />//销毁对象<br />imagedestroy($image);<br />?></code><p>  <img src="http://img.ddvip.com/2007_08/1188063188_ddvip_591.png" onclick="get_larger(this)" alt="PHP常见图形操作 玩转图像函数库" /></p>
 <p> </p>

   <p>  例三:3D图像--cool</p><code><?php<br />$width=400;<br />$height=400;<br />$image = imagecreatetruecolor($width, $height);<br />$white  = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);<br />$gray   = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);<br />$darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);<br />$navy   = imagecolorallocate($image, 0x00, 0x00, 0x80);<br />$darknavy = imagecolorallocate($image, 0x00, 0x00, 0x50);<br />$red   = imagecolorallocate($image, 0xFF, 0x00, 0x00);<br />$darkred = imagecolorallocate($image, 0x90, 0x00, 0x00);<br />imagefill($image,0,0,$white);<br />// make the 3D effect<br />for ($i = $height /2 +20; $i > $height /2; $i--) {<br /> imagefilledarc($image, $width/2, $i, $width/2, $height /2, 0, 45, $darknavy, IMG_ARC_PIE);<br /> imagefilledarc($image, $width/2, $i, $width/2, $height /2, 45, 75 , $darkgray, IMG_ARC_PIE);<br /> imagefilledarc($image, $width/2, $i, $width/2, $height /2, 75, 360 , $darkred, IMG_ARC_PIE);<br />}<br />imagefilledarc($image, $width/2, $height /2, $width/2, $height /2, 0, 45, $navy, IMG_ARC_PIE);<br />imagefilledarc($image, $width/2, $height /2, $width/2, $height /2, 45, 75 , $gray, IMG_ARC_PIE);<br />imagefilledarc($image, $width/2, $height /2, $width/2, $height /2, 75, 360 , $red, IMG_ARC_PIE);<br />// flush image<br />header('Content-type: image/png');<br />imagepng($image);<br />imagedestroy($image);<br />/*<br />//发送对象至文件<br />$filename="ex1.png";<br />imagepng($image,$filename);<br />*/<br />?></code><p>  <img src="http://img.ddvip.com/2007_08/1188063188_ddvip_2940.png" onclick="get_larger(this)" alt="PHP常见图形操作 玩转图像函数库" /></p>