應用PHP GD庫中影象處理函式製作驗證碼
阿新 • • 發佈:2018-12-31
<?php //開啟session,之後會把驗證碼存入session,然後在後端與使用者輸入的驗證碼對比 session_start(); //新建一個真彩色影象 $image=imagecreatetruecolor(100, 30); //定義白色 $bgcolor=imagecolorallocate($image, 255, 255, 255); //填充顏色 imagefill($image,0,0,$bgcolor); //驗證碼字串 $verify_str=''; //迴圈產生四位字元 for ($i=0; $i < 4; $i++) { //設定字型 $font='img/msyh.ttc'; $fontsize=16; //隨機顏色 $fontcolor=imagecolorallocate($image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120)); $contentstr='23456789acefghijkmpqrstvwxyz'; //擷取字元 $fontcontent=substr($contentstr,mt_rand(0,strlen($contentstr)-1),1); $verify_str.=$fontcontent; //隨機位置 $x=($i*100/4)+mt_rand(5,10); $y=mt_rand(20,25); //將文字寫進圖中 imagettftext($image, $fontsize, mt_rand(-30,30), $x, $y, $fontcolor, $font, $fontcontent); } //中文驗證碼 /*for ($i=0; $i < 4; $i++) { $font='img/msyh.ttc'; $fontsize=10; $fontcolor=imagecolorallocate($image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120)); $contentstr='這是一段話'; $fontcontent=mb_substr($contentstr,mt_rand(0,strlen($contentstr)/3-1),1,"utf-8"); $verify_str.=$fontcontent; $x=($i*100/4)+mt_rand(5,10); $y=mt_rand(20,25); imagettftext($image, $fontsize, mt_rand(-30,30), $x, $y, $fontcolor, $font, $fontcontent); }*/ //把字串存入session $_SESSION['verify']=$verify_str; //製作干擾項 200個點 三條線 for ($i=0; $i <200 ; $i++) { $pointcolor=imagecolorallocate($image,mt_rand(50,200),mt_rand(50,200),mt_rand(50,200)); imagesetpixel($image, mt_rand(1,99), mt_rand(1,29), $pointcolor); } for ($i=0; $i < 3; $i++) { $linecolor=imagecolorallocate($image, mt_rand(80,220), mt_rand(80,220), mt_rand(80,220)); imageline($image, mt_rand(1,99), mt_rand(1,29), mt_rand(1,99), mt_rand(1,29), $linecolor); } //設定頭資訊,告訴瀏覽器輸出的內容是影象 header('Content-type:image/png'); //輸出圖片 imagepng($image); //銷燬影象 釋放與 image 關聯的記憶體。 imagedestroy($image); ?>
效果展示: