通過前面對 PHP 中常用的圖形影象處理常式的學習,相信大家都有了一定的收穫。在網上註冊或者登陸賬號的時候常常需要我們輸入驗證碼,那麼驗證碼是怎麼實現的呢?本節我們就將前面所學的知識綜合起來,來為大家演示一下實現驗證碼過程。
具體的實現步驟如下所示:
-
建立畫布;
-
隨機繪製字元;
-
繪製干擾元素;
-
輸出影象到瀏覽器;
-
釋放資源。
完整的實現程式碼如下所示:
<?php
function rand_str($length) {
// 驗證碼中所需要的字元
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$str = '';
for($i = 0; $i < $length; $i++)
{
// 隨機擷取 $chars 中的任意一位字元;
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
function rand_color($image){
// 生成隨機顏色
return imagecolorallocate($image, rand(127, 255), rand(127, 255), rand(127, 255));
}
$image = imagecreate(200, 100);
imagecolorallocate($image, 0, 0, 0);
for ($i=0; $i <= 9; $i++) {
// 繪製隨機的干擾線條
imageline($image, rand(0, 200), rand(0, 100), rand(0, 200), rand(0, 100), rand_color($image));
}
for ($i=0; $i <= 100; $i++) {
// 繪製隨機的干擾點
imagesetpixel($image, rand(0, 200), rand(0, 100), rand_color($image));
}
$length = 4;//驗證碼長度
$str = rand_str($length);//獲取驗證碼
$font = 'C:WindowsFontssimhei.ttf';
for ($i=0; $i < $length; $i++) {
// 逐個繪製驗證碼中的字元
imagettftext($image, rand(20, 38), rand(0, 60), $i*50+25, rand(30,70), rand_color($image), $font, $str[$i]);
}
header('Content-type:image/jpeg');
imagejpeg($image);
imagedestroy($image);
?>
執行結果如下圖所示:
圖:生成驗證碼圖片