PHP生成圖形驗證碼

2020-07-16 10:05:30
通過前面對 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);
?>
執行結果如下圖所示:

生成驗證碼圖片
圖:生成驗證碼圖片