PHP(11) 圖像型的驗證碼

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 );
 
 
運行效果以下:
 

好了,先寫這些,剩餘的明天再補,由於時間太晚了,明天還有課!哈哈!很差意思!各位晚安!!
相關文章
相關標籤/搜索