php解析验证码,全面解析PHP验证码的实现原理 附php验证码小案例
拓展
我們需要開啟gd拓展,可以使用下面的代碼來(lái)查看是否開啟gd拓展。
echo "Hello World!!!!";
echo phpinfo();
?>
然后在瀏覽器上Ctrl+F查找gd選項(xiàng)即可驗(yàn)證自己有沒(méi)有裝這個(gè)拓展,如果沒(méi)有的話,還需要自己全裝一下這個(gè)拓展。
背景圖
imagecreatetruecolor
默認(rèn)生成黑色背景
// 使用gd的imagecreatetruecolor();創(chuàng)建一張背景圖
$image = imagecreatetruecolor(100,30);
// 在顯示這張圖片的時(shí)候一定要先聲明頭信息
header('content-type:image/png');
imagepng($image);
// 釋放資源,銷毀執(zhí)行對(duì)象
imagedestroy($image);
imagecolorallocate
創(chuàng)建一個(gè)填充色,并用imagefill(image,x,y,color)方法來(lái)附著。
// 使用gd的imagecreatetruecolor();創(chuàng)建一張背景圖
$image = imagecreatetruecolor(100,30);
// 生成填充色
$bgcolor = imagecolorallocate($image,255,255,255);
// 將填充色填充到背景圖上
imagefill($image,0,0,$bgcolor);
// 在顯示這張圖片的時(shí)候一定要先聲明頭信息
header('content-type:image/png');
imagepng($image);
// 釋放資源,銷毀執(zhí)行對(duì)象
imagedestroy($image);
imagepng
在使用這個(gè)方法之前,一定要先設(shè)置頭信息,否則不會(huì)正常的顯示圖片
imagedestory(image)
適時(shí)的釋放資源會(huì)減輕對(duì)服務(wù)器請(qǐng)求的壓力。
簡(jiǎn)易數(shù)字驗(yàn)證碼
imagecolorallocate
生成顏色信息,方便待會(huì)的賦予處理。
$fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
imagestring
把內(nèi)容信息寫到圖片的相應(yīng)位置上。
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
增加識(shí)別干擾
//增加點(diǎn)
// 生成一些干擾的點(diǎn),這里是200個(gè)
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
// 增加線
// 生成一些干擾線 這里是5個(gè)
for($i=0;$i<5;$i++){
// 設(shè)置為淺色的線,防止喧賓奪主
$linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
}
數(shù)字字母混合驗(yàn)證碼
// 使用gd的imagecreatetruecolor();創(chuàng)建一張背景圖
$image = imagecreatetruecolor(100,40);
// 生成填充色
$bgcolor = imagecolorallocate($image,255,255,255);
// 將填充色填充到背景圖上
imagefill($image,0,0,$bgcolor);
生成隨機(jī)4位字母以及數(shù)字混合的驗(yàn)證碼
for($i=0;$i<4;$i++){
$fontsize = rand(6,8);
$fontcolor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
// 為了避免用戶難于辨認(rèn),去掉了某些有歧義的字母和數(shù)字
$rawstr = 'abcdefghjkmnopqrstuvwxyz23456789ABCDEFGHJKLMNOPQRSTUVWXYZ';
$fontcontent = substr($rawstr,rand(0,strlen($rawstr)),1);
// 避免生成的圖片重疊
$x += 20;
$y = rand(10,20);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
// 生成一些干擾的點(diǎn),這里是200個(gè)
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
// 生成一些干擾線 這里是4個(gè)
for($i=0;$i<4;$i++){
// 設(shè)置為淺色的線,防止喧賓奪主
$linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
}
header('content-type:image/png');
imagepng($image);
// 釋放資源,銷毀執(zhí)行對(duì)象
imagedestroy($image);
總結(jié)
以上是生活随笔為你收集整理的php解析验证码,全面解析PHP验证码的实现原理 附php验证码小案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: scatter函数_散点图、箱线图、核密
- 下一篇: php终止符,关于php中嵌入html代