標籤:rectangle 實現 target font 邊框 定義函數 man header 背景
產生驗證碼
思路:先定義驗證碼函數getCode()
//繪製驗證碼
$num = 4;//字元長度
getCode($num, 2);
1、建立畫布,分配顏色imagecreatetruecolor()
$height
$width = $num*20; //假設每個字的大小為18
$im = imagecreatetruecolor($width, $height);//建立一個真彩色畫布
$bg = imagecolorallocate($im, rand(200,250), rand(250,255), rand(150, 255));//定義背景顏色映像
$color[] = imagecolorallocate($im, 240,240,240);//定義字型顏色【可以數組形式儲存,定義某些深色字型】
2、開始繪畫(一切都在畫布$im上進行)
imagefill($im, 0,0, $bg); //地區填充(把背景填充到畫布)
imagerectangle($im, 0,0, $width-1, $height-1, $color[rand(0,3)]);//定義個邊框
//繪製驗證碼:逐字輸出
for()
imagettftext($im, rand(16,18), rand(-40,40), 8+(18*$i),18, $color[rand(0,3)], "msyh.ttc", $str[$i]);
//隨機添加幹擾點(點數自定)
for(){
$c = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));//幹擾點顏色
imagesetpixel($im, rand(0,$width), rand(0,$height), $c);
//隨機添加幹擾線(線數自定)
for(){
$c = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));//幹擾線顏色
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $c);
3、輸出映像
header("Content-Type:image/png");//設定回應標頭(此前不能有輸出)
imagepng($im);
4、銷毀圖片
imagedestroy($im);
//自訂函數,擷取驗證碼
function getCode($m=4, $type=1)
{
$str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$t = array(9, 35, strlen($str)-1);//類型劃分
$c = "";
for($i=0; $i<$m; $i++)
$c .= $str[rand(0, $t[$type])];
//調用驗證碼,onclick可實現點擊圖片重新整理
<img src="code.php" /onclick="this.src=‘code.php?id=‘+Math.random()‘">
PHP.20-驗證碼產生