首页 > 代码库 > 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 ‘保存失败‘;
}