1. 程式人生 > >應用PHP GD庫中影象處理函式製作驗證碼

應用PHP GD庫中影象處理函式製作驗證碼

<?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);
 ?>

效果展示: