GD库常用函数

01.php

创新互联公司长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为西塞山企业提供专业的网站设计制作、成都网站建设西塞山网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

/*

用windows画图板画图

1:创建一张画布,设定大小

2:创建颜料.(红,r 绿g  蓝b,三原色组成的. 三原色由弱到强各可以选0-255之间).

3:画线,写字,画图形,填充等.

4:保存成图片

5:销毁画布

用gd库来画图,仍是以上5个步骤.

*/

// 1:造画布,以资源形式返回

$im = p_w_picpathcreatetruecolor(300,200);

// 2: 创建颜料

$gray = p_w_picpathcolorallocate($im,100,100,100);

// 3: 填充画布

p_w_picpathfill($im,0,0,$gray);

// 4: 保存成图片

p_w_picpathpng($im,'./01.png');

// 5: 销毁画布

p_w_picpathdestroy($im);

echo 'ok';

-------------------

02.php

// gd库默认不开启,需要打开相关选项

// 如何检测gd库是否已开启?

print_r(gd_info());

//看到如下类似数组,可以判断gd库是否已开启

Array

(

    [GD Version] => bundled (2.0.34 compatible) // gd库版本

    [FreeType Support] => 1

    [FreeType Linkage] => with freetype

    [T1Lib Support] => 

    [GIF Read Support] => 1

    [GIF Create Support] => 1

    [JPEG Support] => 1

    [PNG Support] => 1

    [WBMP Support] => 1

    [XPM Support] => 

    [XBM Support] => 1

    [JIS-mapped Japanese Font Support] => 

)

-------------------

03.php

// 第一步:创建画布

// 1: 直接创建空白画布,指定宽和高两个参数

// 300*200的空白画布,返回值是资源类型

// 新建的画布,默认底色是纯黑色.

/*

$im = p_w_picpathcreatetruecolor(300,200);

p_w_picpathpng($im,'./02.png');

*/

$im=p_w_picpathcreatefromjpeg('./he.jpg');

$blue=p_w_picpathcolorallocate($im,0,0,255);

p_w_picpathline($im,0,0,800,600,$blue);

if(p_w_picpathjpeg($im,'./03.jpg')){

echo 'ok';

}

?>

-------------------

04.php

$im1=p_w_picpathcreatetruecolor(300,200);

$im2=p_w_picpathcreatetruecolor(600,400);

$blue=p_w_picpathcolorallocate($im1,0,0,255);

$red=p_w_picpathcolorallocate($im2,255,0,0);

?>

-------------------

05.php

$im=p_w_picpathcreatetruecolor(600,400);

$red=p_w_picpathcolorallocate($im,255,0,0);

p_w_picpathfill($im,0,0,$red);

header('content-type:p_w_picpath/jpeg');

p_w_picpathjpeg($im);

p_w_picpathdestroy($im);

?>

-------------------

06.php

// 第五步: 销毁画布

$im = p_w_picpathcreatetruecolor(300,200);

p_w_picpathdestroy($im);

?>

-------------------

07.php

/*

p_w_picpathline : 画线

p_w_picpathstring,p_w_picpathttftext: 写字

p_w_picpathfill — 区域填充

p_w_picpathfilledarc — 画一椭圆弧且填充

p_w_picpathfilledellipse — 画一椭圆并填充

p_w_picpathfilledpolygon — 画一多边形并填充

p_w_picpathfilledrectangle — 画一矩形并填充

p_w_picpathrectangle :画一个矩形

p_w_picpathcopy : 复制图片

p_w_picpathcopymerge :复制图片并合并(可以设透明度.)

p_w_picpathcopyresampled:合并并调整大小

*/

?>

-------------------

08.php

// 画线的学习

/*

bool p_w_picpathline ( resource $p_w_picpath , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

*/

// 1:创建画布

$im = p_w_picpathcreatefromjpeg('./home.jpg');

// 2:造颜料

$red = p_w_picpathcolorallocate($im,255,0,0);

$blue = p_w_picpathcolorallocate($im,0,0,255);

// 3: 画线

p_w_picpathline($im,0,0,670,503,$red);

p_w_picpathline($im,0,503,670,0,$blue);

// 4: 输出

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($im);

// 5: 销毁

p_w_picpathdestroy($im);

?>

-------------------

09.php

/*

写字

bool p_w_picpathstring ( resource $p_w_picpath , int $font , int $x , int $y , string $s , int $col )

resource $p_w_picpath :画布资源

int $font: 大小(1-5),字体是系统默认的,改变不了.

int $x , int $y  : 代表写的第一个字符的左上角点的坐标.

string $s: 要写的内容

int $color:颜色

问:能否换行

答:不能.

问:能否写中文

答:不能.

问:能否指定字体

答:不能

*/

$im = p_w_picpathcreatefromjpeg('./home.jpg');

$blue = p_w_picpathcolorallocate($im,0,0,255);

p_w_picpathstring($im,5,100,100,'welcome to shahe',$blue);

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($im);

-------------------

10.php

function randName($n = 6) {

        if($n <= 0) {

            return '';

        }

        $str = 'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ0123456789';

        $str = substr(str_shuffle($str),0,$n);

        return $str;

    }

// 做验证码

$im = p_w_picpathcreatetruecolor(80,30);

$gray = p_w_picpathcolorallocate($im,30,30,30);

$red = p_w_picpathcolorallocate($im,255,0,0);

p_w_picpathfill($im,0,0,$gray);

p_w_picpathstring($im,5,5,5,randName(4),$red);

// 输出

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($im);

-------------------

11.php

新建网页

   

       

            验证码:

       

   

-------------------

12.php

/*

写中文

p_w_picpathttftext

需要先提供一个ttf字体库

array p_w_picpathttftext ( resource $p_w_picpath , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )

*/

$im = p_w_picpathcreatefromjpeg('./home.jpg');

$blue = p_w_picpathcolorallocate($im,0,0,255);

p_w_picpathttftext($im,36,0,100,100,$blue,'./msyh.ttf','昌平水郡,远离城镇喧嚣');

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($im);

?>

-------------------

13.php

/*

// 画椭圆

在一张画布定一个椭圆,需要4个数据

bool p_w_picpathellipse ( resource $p_w_picpath , int $cx , int $cy , int $w , int $h , int $color )

圆心: cx,cy

宽度: w

高度: h

// 画矩形

bool p_w_picpathrectangle ( resource $p_w_picpath , int $x1 , int $y1 , int $x2 , int $y2 , int $col )

*/

$im = p_w_picpathcreatetruecolor(400,800);

$gray = p_w_picpathcolorallocate($im,100,100,100);

$blue = p_w_picpathcolorallocate($im,0,0,255);

p_w_picpathfill($im,0,0,$gray);

// 画椭圆

p_w_picpathellipse($im,200,50,200,100,$blue);

// 画矩形

p_w_picpathrectangle($im,100,100,300,200,$blue);

// 画圆形

p_w_picpathellipse($im,200,300,200,200,$blue);

// 输出

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($im);

-------------------

14.php

// 图片的复制

/*

案例:做一个底版照片的效果

如下:[x]是一张小图

[x]

利用小图作一张大图

{[x]  [x]}

*/

/*

获取图片的宽度

p_w_picpathsx()

获取图片的高度

p_w_picpathsy()

*/

// 读取图片作为画布资源

$small = p_w_picpathcreatefrompng('./feng.png');

// 判断大小

$sx = p_w_picpathsx($small); // 小图的宽

$sy = p_w_picpathsy($small); // 小图的宽

// 造大图画布

$big = p_w_picpathcreatetruecolor(2*$sx + 20,$sy);

$gray = p_w_picpathcolorallocate($big,100,100,100);// 造灰色

// 铺大图

p_w_picpathfill($big,0,0,$gray);

// 复制小图到大图上.

/*

bool p_w_picpathcopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )

*/

p_w_picpathcopy($big,$small,0,0,0,0,$sx,$sy);

p_w_picpathcopy($big,$small,$sx+20,0,0,0,$sx,$sy);

// 输出

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($big);

?>

-------------------

15.php

// 填充

$im = p_w_picpathcreatetruecolor(400,400);

$gray = p_w_picpathcolorallocate($im,100,100,100);

$blue = p_w_picpathcolorallocate($im,0,0,255);

$red = p_w_picpathcolorallocate($im,255,0,0);

$orange = p_w_picpathcolorallocate($im,248,224,143);

p_w_picpathfill($im,100,100,$gray);

// 画一个椭圆

p_w_picpathellipse($im,200,200,200,200,$blue);

// 填充椭圆

p_w_picpathfill($im,200,200,$red);

// 画一个矩形并直接填充.

p_w_picpathfilledrectangle($im,0,100,200,200,$blue);

// 画一个椭圆并直接填充

p_w_picpathfilledellipse($im,100,80,200,100,$orange);

// 输出

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($im);

?>

-------------------

16.php

// 画一段圆弧并且填充

/*

bool p_w_picpathfilledarc ( resource $p_w_picpath , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color , int $style )

style的说明

PIE:   饼

CHORD: 弦

NOFILL:不填充

EDGED: 有边的

0 IMG_ARC_PIE 

1 IMG_ARC_CHORD 

2 IMG_ARC_NOFILL 

4 IMG_ARC_EDGED 

0000 (饼/弧)

0100 (填充)

-----

0100 = 4 -->扇形+填充

0001 (弦)

0010 (不填充)

--------

0011 = 3 (直线)

0001 (弦)

0100 (填)  --->三角+填充效果

-----

0101 = 5

0000 (弧)

0010 (不填)

-----

0010  -> 2->一段弧线,但不填.

*/

$im = p_w_picpathcreatetruecolor(400,400);

$gray = p_w_picpathcolorallocate($im,100,100,100);

$blue = p_w_picpathcolorallocate($im,0,0,255);

p_w_picpathfill($im,0,0,$gray);

p_w_picpathfilledarc($im,200,200,200,200,45,135,$blue,2);

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($im);

?>

-------------------

17.php

// 图片的复制

/*

案例:做一个底版照片的效果

如下:[x]是一张小图

[x]

利用小图作一张大图

{[x]  [x]}

*/

/*

获取图片的宽度

p_w_picpathsx()

获取图片的高度

p_w_picpathsy()

*/

// 读取图片作为画布资源

$small = p_w_picpathcreatefrompng('./feng.png');

// 判断大小

$sx = p_w_picpathsx($small); // 小图的宽

$sy = p_w_picpathsy($small); // 小图的宽

// 造大图画布

$big = p_w_picpathcreatetruecolor(2*$sx + 20,$sy);

$gray = p_w_picpathcolorallocate($big,100,100,100);// 造灰色

// 铺大图

p_w_picpathfill($big,0,0,$gray);

// 复制小图到大图上.

/*

bool p_w_picpathcopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )

*/

p_w_picpathcopy($big,$small,0,0,0,0,$sx,$sy);

p_w_picpathcopy($big,$small,$sx+20,0,0,0,$sx,$sy);

// 输出

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($big);

?>

-------------------

18.php

// 来点水印效果.

/*

函数的参数和p_w_picpathcopy一样,

差在最后一个参数: $pct 代表透明度.

bool p_w_picpathcopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )

*/

$big = p_w_picpathcreatefromjpeg('./home.jpg');

$bx = p_w_picpathsx($big);

$by = p_w_picpathsy($big);

$small = p_w_picpathcreatefrompng('./feng.png');

$sx = p_w_picpathsx($small);

$sy = p_w_picpathsy($small);

// 加文字

$blue = p_w_picpathcolorallocate($big,0,0,255);

p_w_picpathttftext($big,16,0,100,100,$blue,'./msyh.ttf','昌平水郡,凤姐叫你来买房');

p_w_picpathcopymerge($big,$small,$bx-$sx,0,0,0,$sx,$sy,37);

// 输出

header('content-type: p_w_picpath/jpeg');

p_w_picpathjpeg($big);

?>

-------------------

19.php

// 生成缩略图

/*

bool p_w_picpathcopyresampled ( resource $dst_p_w_picpath , resource $src_p_w_picpath , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

*/

$feng = p_w_picpathcreatefrompng('./feng.png');

$fx = p_w_picpathsx($feng); // 获取宽度

$fy = p_w_picpathsy($feng); // 获取高度

// 造一块小画布

$sx = $fx/2;

$sy = $fy/2;

$small = p_w_picpathcreatetruecolor($sx,$sy);

// 把大画布粘过来,同时缩略粘过来

p_w_picpathcopyresampled($small,$feng,0,0,0,0,$sx,$sy,$fx,$fy);

if(p_w_picpathpng($small,'./xiaofeng.png')) {

    echo '保存成功';

} else {

    echo '保存失败';

}


分享标题:GD库常用函数
文章来源:http://csdahua.cn/article/gcgogo.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流