PHP生成圖像驗(yàn)證碼的方法小結(jié)(2種方法)
本文實(shí)例講述了PHP生成圖像驗(yàn)證碼的方法。分享給大家供大家參考,具體如下:
1、生成加法運(yùn)算驗(yàn)證碼圖片
session_start ();
/*定義頭文件為圖片*/
header("Content-type: image/png");
/*生成驗(yàn)證碼*/
/*創(chuàng)建圖片設(shè)置字體顏色*/
$im = imagecreate($w, $h);
$red = imagecolorallocate($im, 255, 255, 255);
$white = imagecolorallocate($im, 255, 255, 255);
/*隨機(jī)生成兩個(gè)數(shù)字*/
$num1 = rand(1, 20);
$num2 = rand(1, 20);
$_SESSION ["administratorConfirmCode"] = $num1+$num2;
/*設(shè)置圖片背景顏色*/
$gray = imagecolorallocate($im, 118, 151, 199);
$black = imagecolorallocate($im, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
/*創(chuàng)建圖片背景*/
imagefilledrectangle($im, 0, 0, 100, 24, $black);
/*在畫(huà)布上隨機(jī)生成大量點(diǎn)*/
for ($i = 0; $i < 80; $i++) {
imagesetpixel($im, rand(0, $w), rand(0, $h), $gray);
}
/*將計(jì)算驗(yàn)證碼寫(xiě)入到圖片中*/
imagestring($im, 5, 5, 4, $num1, $red);
imagestring($im, 5, 30, 3, "+", $red);
imagestring($im, 5, 45, 4, $num2, $red);
imagestring($im, 5, 70, 3, "=", $red);
imagestring($im, 5, 80, 2, "?", $white);
/*輸出圖片*/
imagepng($im);
imagedestroy($im);
2、生成字符驗(yàn)證碼圖片【值得注意的是在字體哪里,需要引入實(shí)際的字體路徑,否則,可能出現(xiàn)圖像顯示不了驗(yàn)證碼】
session_start ();
/*設(shè)置文件頭為圖片輸出*/
Header("Content-type: image/JPEG");
/*調(diào)用生成驗(yàn)證碼函數(shù)*/
$str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234565789";
$result="";
for($i=0;$i<$length;$i++){
$num[$i]=rand(0,61);
$result.=$str[$num[$i]];
}
$text = $result;
$_SESSION ["administratorConfirmCode"] = $text;
/*設(shè)置圖片的寬度和高度*/
$im_x = $w;
$im_y = $y;
/*創(chuàng)建圖片*/
$im = imagecreatetruecolor($im_x,$im_y);
$text_c = ImageColorAllocate($im, mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
$tmpC0=mt_rand(100,255);
$tmpC1=mt_rand(100,255);
$tmpC2=mt_rand(100,255);
$buttum_c = ImageColorAllocate($im,$tmpC0,$tmpC1,$tmpC2);
imagefill($im, 16, 13, $buttum_c);
/*字體文件*/
$font = _WEB_DIR_.'/font/comic.ttf';
for ($i=0;$i<strlen($text);$i++){
$tmp =substr($text,$i,1);
$array = array(-1,1);
$p = array_rand($array);
$an = $array[$p]*mt_rand(1,10);//角度
$size = 28;
imagettftext($im, $size, $an, 15+$i*$size, 35, $text_c, $font, $tmp);
}
/*將字符寫(xiě)入文件中*/
$distortion_im = imagecreatetruecolor ($im_x, $im_y);
imagefill($distortion_im, 16, 13, $buttum_c);
for ( $i=0; $i<$im_x; $i++) {
for ( $j=0; $j<$im_y; $j++) {
$rgb = imagecolorat($im, $i , $j);
if( (int)($i+20+sin($j/$im_y*2*M_PI)*10) <= imagesx($distortion_im)&& (int)($i+20+sin($j/$im_y*2*M_PI)*10) >=0 ) {
imagesetpixel ($distortion_im, (int)($i+10+sin($j/$im_y*2*M_PI-M_PI*0.1)*4) , $j , $rgb);
}
}
}
/*干擾元素點(diǎn)的數(shù)量*/
$count = 160;
/*創(chuàng)建干擾元素點(diǎn)*/
for($i=0; $i<$count; $i++){
$randcolor = ImageColorallocate($distortion_im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagesetpixel($distortion_im, mt_rand()%$im_x , mt_rand()%$im_y , $randcolor);
}
/*創(chuàng)建干擾線(xiàn)條*/
$rand = mt_rand(5,30);
$rand1 = mt_rand(15,25);
$rand2 = mt_rand(5,10);
for ($yy=$rand; $yy<=+$rand+2; $yy++){
for ($px=-80;$px<=80;$px=$px+0.1){
$x=$px/$rand1;
if ($x!=0){
$y=sin($x);
}
$py=$y*$rand2;
imagesetpixel($distortion_im, $px+80, $py+$yy, $text_c);
}
}
/*以PNG格式將圖像輸出到瀏覽器*/
ImagePNG($distortion_im);
/*銷(xiāo)毀圖像*/
ImageDestroy($distortion_im);
ImageDestroy($im);
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP圖形與圖片操作技巧匯總》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP編碼與轉(zhuǎn)碼操作技巧匯總》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php正則表達(dá)式用法總結(jié)》、及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php圖像驗(yàn)證碼生成代碼
- PHP生成各種隨機(jī)驗(yàn)證碼的方法總結(jié)【附demo源碼】
- PHP封裝函數(shù)實(shí)現(xiàn)生成隨機(jī)的字符串驗(yàn)證碼
- PHP生成圖片驗(yàn)證碼功能示例
- PHP生成制作驗(yàn)證碼的簡(jiǎn)單實(shí)例
- 最新最全PHP生成制作驗(yàn)證碼代碼詳解(推薦)
- 基于PHP生成簡(jiǎn)單的驗(yàn)證碼
- PHP生成可點(diǎn)擊刷新的驗(yàn)證碼簡(jiǎn)單示例
- php生成酷炫的四個(gè)字符驗(yàn)證碼
- php生成圖片驗(yàn)證碼的方法
- php實(shí)現(xiàn)生成驗(yàn)證碼實(shí)例分享
- php生成復(fù)雜驗(yàn)證碼(傾斜,正弦干擾線(xiàn),黏貼,旋轉(zhuǎn))
相關(guān)文章
PHP實(shí)現(xiàn)圖片不變型裁剪及圖片按比例裁剪的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)圖片不變型裁剪及圖片按比例裁剪的方法,涉及PHP裁剪縮略圖的常用技巧,需要的朋友可以參考下2016-01-01
PHP實(shí)現(xiàn)登錄的Cookie存儲(chǔ)方案詳解
這篇文章主要介紹了PHP實(shí)現(xiàn)登錄的Cookie存儲(chǔ)方案詳解的相關(guān)資料,需要的朋友可以參考下2023-02-02
php中文繁體和簡(jiǎn)體相互轉(zhuǎn)換的方法
這篇文章主要介紹了php中文繁體和簡(jiǎn)體相互轉(zhuǎn)換的方法,涉及php中數(shù)組簡(jiǎn)體繁體對(duì)照表的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Php Mssql操作簡(jiǎn)單封裝支持存儲(chǔ)過(guò)程
沒(méi)有啥太多的功能,就是簡(jiǎn)單封裝,也沒(méi)有緩存,平時(shí)用ezSQL,但是ezSQL不支持存儲(chǔ)過(guò)程,所以這里封裝了存儲(chǔ)過(guò)程,因?yàn)樽约旱男枰?,只是做一個(gè)標(biāo)記在這里而已。2009-12-12
PHP基于面向?qū)ο髮?shí)現(xiàn)的留言本功能實(shí)例
這篇文章主要介紹了PHP基于面向?qū)ο髮?shí)現(xiàn)的留言本功能,結(jié)合實(shí)例形式分析了php基于面向?qū)ο蟮牧粞员鞠嚓P(guān)寫(xiě)入、顯示查看、日志記錄等相關(guān)方法封裝與使用技巧,需要的朋友可以參考下2018-04-04
【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03
php+html5使用FormData對(duì)象提交表單及上傳圖片的方法
這篇文章主要介紹了php+html5使用FormData對(duì)象提交表單及上傳圖片的方法,實(shí)例分析了FormData對(duì)象的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02

