平時我們在登錄或注冊一些網(wǎng)站的時候都會輸入一些驗證碼,驗證碼上也會有一些點或者線作為干擾項青团,當你看不見的時候可以選擇換一張或者看不清來切換驗證碼芦昔。這個方法是比較常見且常用的,前幾天自己也寫了一個,拿出來跟大家分享分享帖努,希望對大家有所幫助拼余。
首先你得創(chuàng)建一個PHP文件梭纹,創(chuàng)建好PHP文件之后就來看功能的實現(xiàn)方法吧致份。
// 設置session,必須處于腳本的最頂端
session_start();
// 新建一個真色彩圖像 imagecreatetruecolor(int $width, int $height)返回一個圖像表示诡宗,
// 代表一個x_size 和 y_size 的黑色圖像
$image = imagecreatetruecolor(100,30);
// imagecolorallocate 一幅圖像分配顏色
// 本函數(shù)用來匹配圖形的顏色,供其它繪圖函數(shù)使用。
// 參數(shù) image 表示圖形的 handle。參數(shù) red檩奠、green、blue 是色彩三原色,其值從0至255屋灌。
// imagecolorallocate($image,255,255,255);表示白色
$color = imagecolorallocate($image,255,255,255);
//區(qū)域填充 imagefill($image,0,0,$color);中的 0,0表示X岸蜗、Y軸的起始坐標
imagefill($image,0,0,$color);
$string = '';
//隨機生成數(shù)字
for ($i=0; $i < 4 ; $i++) {
// 設置字體的大小
$fontsize = 20;
// 設置字體顏色铃慷,隨機顏色
$fontcolor = imagecolorallocate($image,rand(0,50),rand(0,50),rand(0,50));
// 設置數(shù)字
// $fontcontent = rand(0,9);
// 設置數(shù)字加字母
$data = 'abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456789';
// substr函數(shù)返回字符串中的一部分
// strlen函數(shù)返回字符串的長度
// rand生成隨機數(shù) rand(0,max)生成 0~max之間的隨機整數(shù)
$fontcontent = substr($data, rand(0,strlen($data) - 1),1);
// $fontcontent = substr($data, rand(0,strlen($data)),1);
$string .= $fontcontent;
// 設置坐標
$x = ($i*100/4)+ rand(5,10);
$y = rand(5,10);
// imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor)
// imagestring() 用fontcolor顏色將字符串fontcontent畫到image所代表的圖像的x,y坐標處
//(這是字符串左上角坐標坛怪,整幅圖像的左上角為 0,0)如果 font 是 1更啄,2义锥,3柱恤,4 或 5,
// 則使用內置字體薄料。
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
// 存到session
$_SESSION['authcode'] = $string;
// 增加干擾元素,設置雪花點
for ($i=0; $i < 200 ; $i++) {
// 設置點的顏色巩梢,50-200顏色比數(shù)字淺不干擾閱讀
$pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
// imagesetpixel 畫一個單一像素
// imagesetpixel(圖片資源,X軸坐標范圍,Y軸坐標范圍,顏色標識符);
imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);
}
// 增加干擾元素,設置橫線
for ($i=0; $i < 4; $i++) {
// 設置線的顏色
$linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
// 設置線创泄,兩點一線
// imageline($image ,$x1 ,$y1 ,$x2 ,$y2 ,$color )
// imageline() 用 color 顏色在圖像 image 中從坐標
// x1艺玲,y1 到 x2,y2(圖像左上角為 0, 0)畫一條線段鞠抑。
imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
// 設置頭部饭聚,image/png
header('Content-Type:image/png');
//imagepng 建立png圖形函數(shù)
imagepng($image);
// imagedestroy 結束圖形函數(shù) 銷毀$image
imagedestroy($image);
運行的截圖如下: