PHP之GD库扩展

一、开始GD扩展

GD库是用来处理图片的。使用GD库,首先在php.ini中开启GD扩展

extension=php_gd2.dll

开启以后就可以使用image开头的函数了

PHP之GD库扩展

二、创建最简单的图片

步骤

  1. 创建画布
  2. 给画布填充颜色(给画布分配的第一个颜色自动填充成背景色)
  3. 显示图片
<?php
$img=imagecreate(200,100);	//创建图片
//var_dump($img);		//resource(2) of type (gd) 
imagecolorallocate($img,255,0,0);	//给图片分配第一个颜色,默认是背景色
//操作一:显示图片
/*
//告知浏览器用jpg格式显示
header('content-type:image/jpeg');
//显示图片
imagejpeg($img);	//用jpg格式显示图片
*/

//操作二:保存图片(不需要设置header头)
imagejpeg($img,'./tu.jpg');

多学一招

imagepng():将图片输出为png格式

imagegif():将图片输出为gif格式

小结:

  1. 第一个分配的颜色是背景色
  2. 要在浏览器显示画布,需要设置header()头
  3. 保存画布,不需要设置header()头

三、填充颜色

给图片分配的第一个颜色自动填充成背景色,如果要更换背景色需要手动的填充颜色

<?php
$img=imagecreate(200,100);	//创建图片资源
$color=imagecolorallocate($img,200,200,200);
//更改背景色
switch(rand(1,100)%3) {
	case 0:
		$color=imagecolorallocate($img,255,0,0);	//颜色的索引编号
		break;
	case 1:
		$color=imagecolorallocate($img,0,255,0);
		break;
	default:
		$color=imagecolorallocate($img,0,0,255);
}
//填充颜色
imagefill($img,0,0,$color);	
//显示图片
header('content-type:image/png');
imagepng($img);



四、验证码

4.1、验证码的作用

防止暴力破解

PHP之GD库扩展

4.2、原理

创建一个图片,在图片上写上一串随机字符串

实现步骤:

  1. 第一步:生成随机字符串
  2. 第二步:创建画布
  3. 将字符串写到画布上
imagestring(图片资源,内置字体,起始点x,起始点y,字符串,颜色编号)

难点:字符串居中

PHP之GD库扩展

4.3、代码实现

<?php
//第一步:创建随机字符串
//1.1  创建字符数组
$all_array=array_merge(range('a','z'),range('A','Z'),range(0,9));	//所有字符数组
$div_array=['1','l','0','o','O','I'];	//去除容易混淆的字符
$array=array_diff($all_array,$div_array);	//剩余的字符数组
unset($all_array,$div_array);		//销毁不需要使用的数组
//1.2	随机获取4个字符
$index=array_rand($array,4);	//随机取4个字符,返回字符下标,按先后顺序排列
shuffle($index);	//打乱字符
//1.3	通过下标拼接字符串
$code='';
foreach($index as $i){
	$code.=$array[$i];
}
//第二步:创建画布
$img=imagecreate(150,30);
imagecolorallocate($img,255,0,0);			//分配背景色
$color=imagecolorallocate($img,255,255,255);	//分配前景色
//第三步:将字符串写到画布上
$font=5;		//内置5号字体
$x=(imagesx($img)-imagefontwidth($font)*strlen($code))/2;
$y=(imagesy($img)-imagefontheight($font))/2;
imagestring($img,$font,$x,$y,$code,$color);
//显示验证码
header('content-type:image/gif');
imagegif($img);

小结:

  1. range():生成指定范围的数组
  2. array_merge():合并数组
  3. array_diff():计算数组的差集
  4. array_rand():随机获取数组元素
  5. shuffle():打乱数组
  6. 去除容易混淆的字符
  7. 数组要打乱
  8. 起始点x=(图片宽度-字符串宽度)/2
  9. 字符串宽度=字符的宽度*字符的个数
  10. 起始点y=(图片高度-字符高度)/2

运行结果
PHP之GD库扩展

五、打开图片创建验证码

上一篇:iOS 生命周期


下一篇:C Good String Codeforces Round #560 (Div. 3)