PHP GD库 教程

■ 检测GD库是否已开启:
 
GD库默认不开启,需要自己打开。
 
通过 gd_info() 判断GD库是否已开启:
gd_info() ——作用:取得当前安装的 GD 库的信息。
 
开启GD库:
在 php.ini 中找到 extension=php_gd2.dll ,去掉注释(去掉前面的分号)。
 
 
print_r(gd_info()); //gd_info() 取得当前安装的 GD 库的信息。
 
以上语句打印内容如下:
 
Array
(
    [GD Version] => bundled (2.1.0 compatible) <——— GD库的版本。
    [FreeType Support] => 1 <——— 是否支持免费字体。
    [FreeType Linkage] => with freetype
    [T1Lib Support] => 
    [GIF Read Support] => 1 <——— 是否支持读取gif图片。
    [GIF Create Support] => 1 <——— 是否支持创建gif图片。
    [JPEG Support] => 1 <——— 是否支持对jpeg图片的操作。
    [PNG Support] => 1 <——— 是否支持对png图片的操作。
    [WBMP Support] => 1 <——— 是否支持对bmp图片的操作。
    [XPM Support] => 1
    [XBM Support] => 1
    [JIS-mapped Japanese Font Support] => 
)
 
 
■ 计算机图形的相关基础:
 
● 坐标以左上角为原点。
 
● 以像素为单位。
 
● 已知 x轴坐标 与 y轴坐标 可以确定一个点。
 
● 确定一个矩形有两种方法:
 
① 已知 两个点 可以确定一个矩形。
 
② 已知 左上角的点、宽度、高度 可以确定一个矩形。
 
 
■ GD库 图片处理流程:
 
我们要使用GD库处理图像,首先要知道 图像处理流程 。
 
图像处理流程分为5步:
1. 创建画布;
2. 创建颜色;
3. 编辑图像;
4. 输出或保存画布;
5. 销毁画布。
 
每一步都有对应的函数,下面逐一介绍。
 
 
 
第一步,创建画布
 
创建画布有两种方式:
 
① 直接创建一张空的画布;
 
② 打开一张图片作为画布。
 
★注意:创建画布会返回一个『画布资源』。
 
$width = 300;
$height = 200;
 
// ① 创建一张空的画布(默认全黑),并制定其大小:
画布资源 = imagecreatetruecolor($width,$height);
 
 
// ② 直接打开一张图片作为画布:
画布资源 = imagecreatefromgif(图片路径);// 打开一个gif图片作为画布。
画布资源 = imagecreatefromjpeg(图片路径);// 打开一个jpg图片作为画布。
画布资源 = imagecreatefrompng(图片路径);// 打开一个png图片作为画布。
画布资源 = imagecreatefromwbmp(图片路径);// 打开一个bmp图片作为画布。
 
 
 
第二步,创建颜色(调颜料)
 
函数 imagecolorallocate() 用于为画布创建颜色。
该函数返回一个代表给定的R、G、B所组成的颜色标识符。
 
$r = 0;
$g = 0;
$b = 255;
 
颜色标识符 = imagecolorallocate(画布资源,$r,$g,$b);// 创建蓝色。
 
 
 
第三步,编辑图像
 
以下是编辑图像的函数,编辑图像的函数参数较多:
 
 
//画直线:
imageline(画布资源,$x1,$y1,$x2,$y2,颜色标识符);// 画一条线段。
imagesetstyle(画布资源,$arr_style);// 设定画线的风格。
 
★注意:
①参数 $arr_style 为数组,其内容为输出画线的风格,例如:
 
$white = imagecolorallocate($image,255,255,255);
$red = imagecolorallocate($image,230,0,0);
 
$arr_style = array($red,$red,$red,$red,$white,$white,$white,$white);
 
②如果设定了画线风格,imageline中的“颜色标识符”就要改为 IMG_COLOR_STYLED 例如:
 
imageline($image,0,0,800,500,IMG_COLOR_STYLED);
 
 
//写字:
imagestring(画布资源,字体大小1~5,$x,$y,字符串内容,颜色标识符);// 水平地写一行字符串。
imagettftext(画布资源,字体大小像素,逆时针旋转的角度,$x,$y,颜色标识符,字体库文件,文本内容);// 用 TrueType 字体向图像写入文本(可以写中文)。
//★注意:使用 imagettftext() 前需要先提供一个ttf字体库文件。
 
 
//画图形:
imageellipse(画布资源,$x,$y,宽,高,颜色标识符);// 画一个椭圆。
imagerectangle(画布资源,$x1,$y1,$x2,$y2,颜色标识符);// 画一个矩形。
imagepolygon(画布资源,顶点坐标数组,顶点的总数,颜色标识符);// 画一个多边形。
imagearc(画布资源,$x,$y,宽,高,起始角度,结束角度,颜色标识符);// 画椭圆弧。
//★注意:0°位于三点钟位置,以顺时针方向绘画。
 
 
//填充:
imagefill(画布资源,$x,$y,颜色标识符);// 区域填充(常用于设定背景颜色)。
imagefilledellipse(画布资源,$x,$y,宽,高,颜色标识符);// 画一个椭圆并填充。
imagefilledrectangle(画布资源,$x1,$y1,$x2,$y2,颜色标识符);// 画一个矩形并填充。
imagefilledpolygon(画布资源,顶点坐标数组,顶点的总数,颜色标识符);// 画一个多边形并填充。
imagefilledarc(画布资源,$x,$y,宽,高,起始角度,结束角度,颜色标识符,$style);// 画一个椭圆弧且填充。
 
★注意:
参数 $style 可以是下列两个值按位或(即 or)后的值(将两个效果组合):
 
IMG_ARC_PIE 值为 0 表示产生圆形边界(弧)。
IMG_ARC_CHORD 值为 1 表示只用直线连接了起始和结束点(弦)。
IMG_ARC_NOFILL 值为 2 指明弧或弦只有轮廓,不填充。
IMG_ARC_EDGED 值为 4 指明用直线将起始和结束点与圆心点相连(并填充)。
 
其中 IMG_ARC_PIE 和 IMG_ARC_CHORD 是互斥的,如果两个都用,IMG_ARC_CHORD 生效。
IMG_ARC_EDGED 和 IMG_ARC_NOFILL 一起使用(即值为6)是画饼状图轮廓的好方法(而不用填充)。
 
 
//取图像宽、高:
imagesx(画布资源);// 取得图像宽度。
imagesy(画布资源);// 取得图像高度。
 
 
//图像复制:
 
imagecopy(b画布的资源,a画布的资源,$b_x,$b_y,$a_x,$a_y,$a_w,$a_h);
// 将 a画布中 从坐标$a_x,$a_y开始,取宽度为$a_w,高度为$a_h 的一部分拷贝到 b画布中坐标为$b_x,$b_y 的位置上。
 
imagecopymerge(b画布的资源,a画布的资源,$b_x,$b_y,$a_x,$a_y,$a_w,$a_h,★透明度);
// 将 a画布中 从坐标$a_x,$a_y开始,取宽度为$a_w,高度为$a_h 的一部分拷贝到 b画布中坐标为$b_x,$b_y 的位置上。透明度从 0 到 100。
 
imagecopyresampled(b画布的资源,a画布的资源,$b_x,$b_y,$a_x,$a_y,$a_new_w,$a_new_h,$a_w,$a_h);
// 将 a画布中 从坐标$a_x,$a_y开始,取宽度为$a_w,高度为$a_h 的一部分,以新宽度 $a_new_w 和 新高度 $a_new_h 拷贝到 b画布中坐标为$b_x,$b_y 的位置上。
 
 
 
第四步,输出或保存图片
 
有些时候,我们并不需要保存画布,例如做验证码。
这时候我们可以直接输出,不保存。
 
imagepng(画布资源 [,保存路径]);// 生成 png 图片,如果不写『保存路径』就只输出不保存。
imagegif(画布资源 [,保存路径]);// 生成 gif 图片,如果不写『保存路径』就只输出不保存。
imagejpeg(画布资源 [,保存路径 [,质量值]]);// 生成 jpeg 图片,如果不写『保存路径』就只输出不保存。
imagewbmp(画布资源 [,保存路径 [,前景色]]);// 生成 bmp 图片,如果不写『保存路径』就只输出不保存。
 
//★注意:① 若要通过以上4个函数之一直接在浏览器中输出图像,则必须在其之前加上以下语句:
header('content-type:image/图像格式'); //作用:告诉浏览器,接下来的内容是图像信息,要以图像的形式输出内容。
 
//★注意:② 若要在浏览器输出图像,则在输出语句前 绝对不可以出现任何文字输出语句。
 
 
 
第五步,销毁画布
 
imagedestroy(画布资源);
 
 
 
■ 判断图像类型:
不能通过图像的后缀来判断图像类型。这样相当不可靠。
通过系统函数 getimagesize() 获得图片的信息,再从图片信息中取得图像类型。
 
★注意:getimagesize() 不需要GD库。
 
函数 getimagesize() 返回一个具有四个元素的数组。
  索引 [0] 包含图像宽度的像素值。
  索引 [1] 包含图像高度的像素值。
  索引 [2] 是图像类型的标记:
1 = GIF,
2 = JPG,
3 = PNG,
4 = SWF,
5 = PSD,
6 = BMP,
7 = TIFF(intel byte order),
8 = TIFF(motorola byte order),
9 = JPC,
10 = JP2,
11 = JPX,
12 = JB2,
13 = SWC,
14 = IFF,
15 = WBMP,
16 = XBM。
这些标记与 PHP 4.3.0 新加的 IMAGETYPE 常量对应。
 
索引 [3] 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记。
 
 
getimagesize(图像路径);// 取得图像的信息。
 
 
 
■ 实现验证码扭曲:
imagecolorat() 与 imagesetpixel() 常用于实现验证码扭曲效果。
 
imagecolorat(图像资源,x轴坐标,y轴坐标);// 取得某像素的颜色标识符。
imagesetpixel(图像资源,x轴坐标,y轴坐标,颜色标识符);// 画一个单一像素。
 

 

posted @ 2017-11-10 20:26  Uncle_Jay  阅读(716)  评论(0编辑  收藏  举报