第一步:建立一個畫布php
第二步:建立顏色數組
第三步:準備字符瀏覽器
第四步:往 畫布上寫字符ide
第五步:畫干擾線(點)函數
第六步:輸出格式spa
第七步:輸出圖片.net
第八步:銷燬資源blog
<?php verify(); function verify($width = 100 , $height = 40 , $num = 5 , $type = 3 ){ //1 建立畫布 $image = imagecreatetruecolor($width , $height); //2 建立顏色 //由於後邊老是用,因此寫了兩個函數,分別是lightColor(淺顏色)、deepColor(深顏色) //3 建立字符 //這裏是本身選擇的類型,1 就是純數字,2 就是純小字母, 3 就是數字大小寫字母的混合 switch($type){ case 1: //定義字符串 $str = "0123456789"; //打亂字符串 $strNew = str_shuffle($str); //截取$num個 $string = substr($strNew , 0 , $num); break; case 2: //定義字符 $arr = range('a' , 'z'); //打亂字符串數組 shuffle($arr); //截取 $tmp = array_slice($arr , 0 , $num); //連成字符串 $string = join('' , $tmp); break; case 3: $str = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"; $string = substr(str_shuffle($str) , 0 , $num); break; } //給背景填充淺顏色 //背景顏色太深的話驗證碼就看不清了 imagefilledrectangle($image , 0 , 0 , $width , $height , lightColor($image)); //4 往畫布上寫入字符 for($i = 0; $i<$num; $i++) { //由於咱們設定的是輸出5 個字符,因此$i是小於的$num //floor是取整,$width / $num 把寬度分了$num塊地,*$i是一個字符佔一塊地,以避免全都堆在一塊看不出來 $x = floor($width / $num) * $i; $y = mt_rand(10 , $height - 20); imagechar ($image , 5 , $x , $y , $string[$i] , deepColor($image)); } //5 畫干擾線、點 //干擾線 for($i = 0; $i<$num; $i++) { imagearc ($image , mt_rand(10 , $width) , mt_rand(10 , $height) , mt_rand(10 , $width) , mt_rand(10 , $height) , mt_rand(0 , 10) , mt_rand(0 , 270) , deepColor($image)); } //干擾點 for( $i = 0; $i<50; $i++) { imagesetpixel($image , mt_rand(0 , $width) , mt_rand(0 , $height) , deepColor($image)); } ob_clean();//擦除緩衝區 //6 告訴瀏覽器輸出格式:png header("Content-type: image/png"); //7 輸出圖片 imagepng($image); //8 銷燬 imagedestroy($image); return $string; //echo $string; } //設置深淺顏色 function lightColor ($image) { return imagecolorallocate($image , mt_rand(120 , 255) , mt_rand(120 , 255) , mt_rand(120 , 255)); } function deepColor ($image) { return imagecolorallocate($image , mt_rand(0 , 120) , mt_rand(0 , 120) , mt_rand(0 , 120)); } ?>
特別說明: 圖片
ob_clean();//擦除緩衝區
以前是沒有加上這個的,結果就告訴我「因存在錯誤而沒法顯示」,以下圖:資源
不過幸運的是,在百度上找到答案了:https://blog.csdn.net/ghbfgb/article/details/50845075。加上以後,就很輕易的解決了這個問題,如今的效果是這樣的:
好了。