PHP之GD庫擴充套件

2021-05-15 07:00:17

一、開始GD擴充套件

GD庫是用來處理圖片的。使用GD庫,首先在php.ini中開啟GD擴充套件

extension=php_gd2.dll

開啟以後就可以使用image開頭的函數了

在這裡插入圖片描述

二、建立最簡單的圖片

步驟

  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、驗證碼的作用

防止暴力破解

在這裡插入圖片描述

4.2、原理

建立一個圖片,在圖片上寫上一串隨機字串

實現步驟:

  1. 第一步:生成隨機字串
  2. 第二步:建立畫布
  3. 將字串寫到畫布上
imagestring(圖片資源,內建字型,起始點x,起始點y,字串,顏色編號)

難點:字串居中

在這裡插入圖片描述

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

執行結果
在這裡插入圖片描述

五、開啟圖片建立驗證碼