簡單的驗證碼其實就是在圖片中輸出了幾個字符,通過imagestring函數就能實現。
但是在處理上,為了使驗證碼更加的安全,防止其他程序自動識別,因此常常需要對驗證碼進行一些干擾處理,通常會采用繪制一些噪點,干擾線段,對輸出的字符進行傾斜、扭曲等操作。
可以使用imagesetpixel繪制點來實現噪點干擾,但是只繪制一個點的作用不大,因此這里常常會使用循環進行隨機繪制。
例子:
<?php $img = imagecreatetruecolor(100, 40); $black = imagecolorallocate($img, 0x00, 0x00, 0x00); $green = imagecolorallocate($img, 0x00, 0xFF, 0x00); $white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF); imagefill($img,0,0,$white); //生成隨機的驗證碼 $code = ''; for($i = 0; $i < 4; $i++) { //4位數的驗證碼 $code .= rand(0, 9); } imagestring($img, 5, 10, 10, $code, $black); //加入噪點干擾 for($i=0;$i<50;$i++) { imagesetpixel($img, rand(0, 100) , rand(0, 100) , $black); //imagesetpixel — 畫一個單一像素,語法: bool imagesetpixel ( resource $image , int $x , int $y , int $color ) imagesetpixel($img, rand(0, 100) , rand(0, 100) , $green); } //輸出驗證碼 header("content-type: image/png"); imagepng($img); //以 PNG 格式將圖像輸出到瀏覽器或文件 imagedestroy($img); //圖像處理完成后,使用 imagedestroy() 指令銷毀圖像資源以釋放內存,雖然該函數不是必須的,但使用它是一個好習慣。 ?>
【小主,覺得有用打賞點哦!多多少少沒關系,一分也是對我的支持和鼓勵。謝謝!】