首页 > 代码库 > GD库常用函数

GD库常用函数

01.php

<?php


/*

用windows画图板画图

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



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



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



4:保存成图片



5:销毁画布



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

*/


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

$im = imagecreatetruecolor(300,200);



// 2: 创建颜料

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


// 3: 填充画布

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



// 4: 保存成图片

imagepng($im,‘./01.png‘);


// 5: 销毁画布

imagedestroy($im);



echo ‘ok‘;



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

02.php

<?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

<?php

// 第一步:创建画布


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

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

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

/*

$im = imagecreatetruecolor(300,200);

imagepng($im,‘./02.png‘);

*/


$im=imagecreatefromjpeg(‘./he.jpg‘);

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

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

if(imagejpeg($im,‘./03.jpg‘)){

echo ‘ok‘;

}


?>

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

04.php

<?php

$im1=imagecreatetruecolor(300,200);

$im2=imagecreatetruecolor(600,400);


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

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

?>

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

05.php

<?php

$im=imagecreatetruecolor(600,400);

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

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

header(‘content-type:image/jpeg‘);

imagejpeg($im);


imagedestroy($im);

?>

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

06.php

<?php

// 第五步: 销毁画布


$im = imagecreatetruecolor(300,200);


imagedestroy($im);


?>

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

07.php

<?php

/*

imageline : 画线

imagestring,imagettftext: 写字

imagefill — 区域填充

imagefilledarc — 画一椭圆弧且填充

imagefilledellipse — 画一椭圆并填充

imagefilledpolygon — 画一多边形并填充

imagefilledrectangle — 画一矩形并填充


imagerectangle :画一个矩形


imagecopy : 复制图片

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


imagecopyresampled:合并并调整大小

*/


?>


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

08.php

<?php

// 画线的学习

/*

bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

*/


// 1:创建画布

$im = imagecreatefromjpeg(‘./home.jpg‘);



// 2:造颜料

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

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


// 3: 画线

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

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


// 4: 输出

header(‘content-type: image/jpeg‘);

imagejpeg($im);


// 5: 销毁

imagedestroy($im);

?>


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

09.php

<?php


/*

写字

bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )


resource $image :画布资源

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


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


string $s: 要写的内容


int $color:颜色


问:能否换行

答:不能.


问:能否写中文

答:不能.


问:能否指定字体

答:不能

*/




$im = imagecreatefromjpeg(‘./home.jpg‘);


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


imagestring($im,5,100,100,‘welcome to shahe‘,$blue);


header(‘content-type: image/jpeg‘);

imagejpeg($im);


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

10.php

<?php


function randName($n = 6) {

        if($n <= 0) {

            return ‘‘;

        }

        $str = ‘abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ0123456789‘;

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


        return $str;

    }


// 做验证码


$im = imagecreatetruecolor(80,30);


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

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


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


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


// 输出

header(‘content-type: image/jpeg‘);

imagejpeg($im);



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

11.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">

<head>

<title>新建网页</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta name="description" content="" />

<meta name="keywords" content="" />

<script type="text/javascript">

    function chn() {

        var img0 = document.getElementsByTagName(‘img‘)[0];

        img0.src = http://www.mamicode.com/‘10.php?id=‘ + Math.random();

    }

</script>


<style type="text/css">

</style>

</head>

    <body>

        <form>

            验证码:<input type="text" name="code" /><img src="http://www.mamicode.com/10.php" />

        </form>

    </body>

</html>

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

12.php

<?php

/*

写中文

imagettftext

需要先提供一个ttf字体库

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

*/

$im = imagecreatefromjpeg(‘./home.jpg‘);


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


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


header(‘content-type: image/jpeg‘);

imagejpeg($im);

?>



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

13.php

<?php

/*

// 画椭圆

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

bool imageellipse ( resource $image , int $cx , int $cy , int $w , int $h , int $color )

圆心: cx,cy

宽度: w

高度: h



// 画矩形

bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )



*/



$im = imagecreatetruecolor(400,800);


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

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



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


// 画椭圆

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


// 画矩形

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


// 画圆形

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


// 输出

header(‘content-type: image/jpeg‘);

imagejpeg($im);


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

14.php


<?php


// 图片的复制


/*

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

如下:[x]是一张小图

[x]


利用小图作一张大图

{[x]  [x]}

*/


/*

获取图片的宽度

imagesx()


获取图片的高度

imagesy()


*/



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

$small = imagecreatefrompng(‘./feng.png‘);


// 判断大小

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

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



// 造大图画布

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

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



// 铺大图

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



// 复制小图到大图上.

/*

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

*/


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

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




// 输出

header(‘content-type: image/jpeg‘);

imagejpeg($big);



?>


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

15.php

<?php

// 填充


$im = imagecreatetruecolor(400,400);


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

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

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

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


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


// 画一个椭圆

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


// 填充椭圆

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



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

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



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


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



// 输出

header(‘content-type: image/jpeg‘);

imagejpeg($im);

?>



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

16.php

<?php


// 画一段圆弧并且填充

/*

bool imagefilledarc ( resource $image , 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 = imagecreatetruecolor(400,400);


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

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


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

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



header(‘content-type: image/jpeg‘);

imagejpeg($im);



?>

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

17.php

<?php


// 图片的复制


/*

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

如下:[x]是一张小图

[x]


利用小图作一张大图

{[x]  [x]}

*/


/*

获取图片的宽度

imagesx()


获取图片的高度

imagesy()


*/



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

$small = imagecreatefrompng(‘./feng.png‘);


// 判断大小

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

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



// 造大图画布

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

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



// 铺大图

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



// 复制小图到大图上.

/*

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

*/


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

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




// 输出

header(‘content-type: image/jpeg‘);

imagejpeg($big);



?>

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

18.php

<?php


// 来点水印效果.

/*

函数的参数和imagecopy一样,

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


bool imagecopymerge ( 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 = imagecreatefromjpeg(‘./home.jpg‘);

$bx = imagesx($big);

$by = imagesy($big);



$small = imagecreatefrompng(‘./feng.png‘);

$sx = imagesx($small);

$sy = imagesy($small);



// 加文字

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

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



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


// 输出

header(‘content-type: image/jpeg‘);

imagejpeg($big);




?>

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

19.php

<?php


// 生成缩略图

/*

bool imagecopyresampled ( resource $dst_image , resource $src_image , 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 = imagecreatefrompng(‘./feng.png‘);


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

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



// 造一块小画布

$sx = $fx/2;

$sy = $fy/2;

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



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

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


if(imagepng($small,‘./xiaofeng.png‘)) {

    echo ‘保存成功‘;

} else {

    echo ‘保存失败‘;

}