PHP(11) 圖像型的驗證碼
在用戶登陸程序(版本1)中,咱們曾經提到過驗證碼主要分爲字符型和圖像型兩種,而字符型又能夠分爲數字型和混合型兩種(這些分類是個人分類,能夠存在誤差,請多包涵!^_^)。在上兩篇博文中,咱們已經將字符型的驗證碼實現了,此次,咱們再次咱們的程序作一次升級----圖像型驗證碼
若是咱們在PHP中來處理圖像的話,那麼就必須依賴於GD(Graphics Draw)庫,還記得咱們在php.ini中啓用過php_gd2.dll嗎,啓用該文件的目的就是爲了來處理圖像的!
下面咱們就來了解一下GD函數庫吧!
1. p_w_picpath_create和p_w_picpathcreatetruecolor
兩個函數的目的是同樣的,都是建立一個圖像資源,語法結構也
同樣的
$變量名稱 = p_w_picpathcreate(寬度,高度);
或
$變量名稱 = p_w_picpathcreatetruecolor(寬度,高度);
二者惟一的區別在於:前者是基於調色板;後者基於真彩色(推薦使用)
2. p_w_picpathcolorallocate
功能:爲圖像來分配一個顏色,也就是說這種顏色可能在圖像中使用,但具體的是在前景色中使用;仍是在背景色或填充色中使用,並不固定,由用戶來決定。
$變量名稱 = p_w_picpathcolorallocate($圖像資源名稱,紅色,綠色,藍色);
3. p_w_picpathfill
功能:區域填充
語法:[$變量名稱=]p_w_picpathfill($圖像資源名稱,x,y,顏色);
須要提醒各位的是:顏色不能夠直接來書寫,必須使用imagecolorallocate來分配
4. p_w_picpathstring和p_w_picpathttftext
功能均爲在圖像中書寫文本,不過p_w_picpathstring通常用來使用內置字體來書寫文本,並且文本不能帶有旋轉樣式,若是想經過p_w_picpathstring+外部字體來書寫文本時,那麼必須使用p_w_picpathloadfont來加載字體;而p_w_picpathttftext則使用TrueType 字體在圖像內書寫文本。
[$變量名稱=]p_w_picpathstring($圖像資源名稱,字號,x,y,」內容」,顏色);
[$變量名稱=]p_w_picpathttftext($圖像資源名稱,字號,旋轉角度,x,y,顏色,」字體文件」,」內容」);
5. p_w_picpathfilledrectangle、p_w_picpatharc、p_w_picpathline、p_w_picpathsetpixel
p_w_picpathfillledrectangle的功能爲繪製填充的矩形
p_w_picpatharc的功能爲在圖布上繪製圓弧
p_w_picpathline的功能爲在畫布上繪製線段
p_w_picpathsetpixel的功能爲在畫布上繪製像素點
6. p_w_picpathgif、p_w_picpathjpeg、p_w_picpathpng
p_w_picpathgif的功能爲將圖像資源做爲gif格式輸出到屏幕或生成文件
p_w_picpathjpeg的功能爲將圖像資源做爲jpeg格式輸出到屏幕或生成文件
p_w_picpathpng的功能爲將圖像資源做爲png格式輸出到屏幕或生成文件
7. p_w_picpathdestroy
p_w_picpathdestroy的功能爲銷燬圖像資源
好了,如今的這幾個函數,咱們差很少就都理解了,咱們如今來實現一個簡單的案例:
案例1:
$width
= "120";
$height
= "45";
$img
= p_w_picpathcreatetruecolor($width,$height);
$black
= p_w_picpathcolorallocate($img,0,0,0);
$white
= p_w_picpathcolorallocate($img,255,255,255);
p_w_picpathfill(
$img
,
0
,
0
,
$black
);
p_w_picpathfilledrectangle(
$img
,
1
,
1
,
$width
-
2
,
$height
-
2
,
$white
);
$char
= rand(1000,9999);
p_w_picpathstring(
$img
,
5
,
40
,
15
,
$char
,
$black
);
p_w_picpathjpeg(
$img
);
運行效果以下:
案例2:
$width
= "120";
$height
= "45";
$img
= p_w_picpathcreatetruecolor($width,$height);
$black
= p_w_picpathcolorallocate($img,0,0,0);
$white
= p_w_picpathcolorallocate($img,255,255,255);
p_w_picpathfill(
$img
,
0
,
0
,
$black
);
p_w_picpathfilledrectangle(
$img
,
1
,
1
,
$width
-
2
,
$height
-
2
,
$white
);
for
(
$i
=
0
;
$i
<
4
;
$i
++)
{
$x = 40 + $i * 15;
$char = rand(0,9);
$color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120));
p_w_picpathstring($img,5,$x,15,$char,$color);
}
p_w_picpathjpeg(
$img
);
運行效果以下:
案例3:
$width
= "120";
$height
= "45";
$img
= p_w_picpathcreatetruecolor($width,$height);
$black
= p_w_picpathcolorallocate($img,0,0,0);
$white
= p_w_picpathcolorallocate($img,255,255,255);
p_w_picpathfill(
$img
,
0
,
0
,
$black
);
p_w_picpathfilledrectangle(
$img
,
1
,
1
,
$width
-
2
,
$height
-
2
,
$white
);
for
(
$i
=
0
;
$i
<
4
;
$i
++)
{
$x = 40 + $i * 15;
$char = rand(0,9);
$fontSize = rand(15,20);
$angle = rand(-20,20);
$y = rand(25,35);
$color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120));
p_w_picpathttftext($img,$fontSize,$angle,$x,$y,$color,"PilsenPlakat.ttf",$char);
}
p_w_picpathjpeg(
$img
);
運行效果以下:
案例4:在案例3的基礎上添加一些雜點
$width
= "120";
$height
= "45";
$img
= p_w_picpathcreatetruecolor($width,$height);
$black
= p_w_picpathcolorallocate($img,0,0,0);
$white
= p_w_picpathcolorallocate($img,255,255,255);
p_w_picpathfill(
$img
,
0
,
0
,
$black
);
p_w_picpathfilledrectangle(
$img
,
1
,
1
,
$width
-
2
,
$height
-
2
,
$white
);
for
(
$i
=
0
;
$i
<
5
;
$i
++)
{
p_w_picpathline($img,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$black);
}
for
(
$i
=
0
;
$i
<
50
;
$i
++)
{
p_w_picpathsetpixel($img,rand(0,$width),rand(0,$height),$black);
}
for
(
$i
=
0
;
$i
<
4
;
$i
++)
{
$x = 40 + $i * 15;
$char = rand(0,9);
$fontSize = rand(15,20);
$angle = rand(-20,20);
$y = rand(25,35);
$color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120));
p_w_picpathttftext($img,$fontSize,$angle,$x,$y,$color,"PilsenPlakat.ttf",$char);
}
p_w_picpathjpeg(
$img
);
運行效果以下:
好了,先寫這些,剩餘的明天再補,由於時間太晚了,明天還有課!哈哈!很差意思!各位晚安!!