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
function chn() {
var img0 = document.getElementsByTagName('img')[0];
img0.src = '10.php?id=' + Math.random();
}
-------------------
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://ybzwz.com/article/gcgogo.html