首頁 >後端開發 >PHP問題 >怎樣透過PHP來繪製圖形驗證碼?

怎樣透過PHP來繪製圖形驗證碼?

WBOY
WBOY原創
2021-10-20 10:18:072146瀏覽

在之前的文章中為大家帶來了《PHP中怎樣繪製多邊形、弧形和橢圓形? (圖文詳解)》,其中詳細的為大家介紹了在PHP中應該怎樣繪製圖形為問題,本篇文章我們就來看一下,我們怎樣在PHP中產生圖形驗證碼。希望對大家有幫助!

怎樣透過PHP來繪製圖形驗證碼?

透過我們之前對於PHP中圖像繪製的文章,我們可以利用其中的知識來進行一個擴展,也就是我們在日常登入頁面經常用到的圖形驗證碼,那圖形驗證碼是怎麼形成的,想要學會圖形驗證碼的製作,首先我們先來看看應該怎樣在PHP中繪製文字。

繪製文字

我們常用繪製文字的函數有:

  • imagechar()  :  水平繪製一個字元  

  • ##imagecharup()  :  垂直繪製一個字元 

  • #imagestring()   : 水平繪製一行字串   

  • ##imagestringup()  :  垂直繪製一行字串    

  • ##imagettftext()  :  用TrueType 字體向影像中寫入文字   

  • 其中,imagechar() 、imagecharup() 、imagestring()和imagestringup()函數的語法格式是一樣的,它們的語法格式如下:
imagechar(resource $image, int $font, int $x, int $y, string $c, int $color)

其中,$image表示建立的畫布接下來的操作都是在畫布上進行的,$font表示繪製字體的顏色,$x和$y表示在座標($x,$y)的位置上繪製文字,$c表示要繪製的字元(或字串),$color表示繪製字體的顏色。


範例如下:

<?php
    $a = &#39;young and beautiful&#39;;
    $img = imagecreate(300, 200);
    imagecolorallocate($img, 255, 255, 255);
    $green = imagecolorallocate($img, 0, 255, 0);
    imagestring($img, 5, 5, 50, $a, $green);
    imagestringup($img, 2, 200, 180, $a, $green);
    imagechar($img, 3, 80, 100, $a, $green);
    imagecharup($img, 4, 100, 100, $a, $green);
    header(&#39;Content-type:image/jpeg&#39;);
    imagejpeg($img);
    imagedestroy($img);
?>

輸出結果:


怎樣透過PHP來繪製圖形驗證碼?#還有一個函數是imagettftext() 函數,它也能夠繪製文字,不同的是,它可以使用TrueType字體,也就是Windows系統中副檔名為。 ttf格式的字體,它的語法格式如下:

imagettftext(resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text)

其中,$size表示字元的尺寸,$angle表示角度,這個角度中0度表示從左向右讀的文本,按逆時針旋轉方向數值遞增;$fontfile表示要使用TrueType 字型檔案的路徑;$textb表示要繪製的字串。


範例如下:

<?php
    $str1 = &#39;young and beautiful&#39;;
    $font = &#39;C:\Windows\Fonts\simhei.ttf&#39;;
    $img = imagecreate(300, 300);
    imagecolorallocate($img, 255, 255, 255);
    $green = imagecolorallocate($img, 0, 255, 0);
    imagettftext($img, 16, 45, 40, 250, $green, $font, $str1);
    header(&#39;Content-type:image/jpeg&#39;);
    imagejpeg($img);
    imagedestroy($img);
?>

輸出結果:


怎樣透過PHP來繪製圖形驗證碼?#因此透過imagettftext() 函數完成了對文字的繪製。

繪製圖形驗證碼經過之前繪製文字、圖像的學習,接下來我們可以透過之前學到的知識來進行圖形驗證碼的繪製,在我們的登陸介面中經常能夠遇到圖形驗證碼,那麼接下來我們一起來看看應該如何創建它。

首先,我們先來看最後的效果:


怎樣透過PHP來繪製圖形驗證碼?#想要實現這樣的效果,需要經過一些步驟:

第一步我們要準備好我們需要的畫布,也就是創造畫布。然後準備好我們要產生的字串,再在畫布上繪製幹擾圖案,然後輸出影像,最後釋放資源。

範例如下:

<?php
check_code();
function check_code($width = 100, $height = 50, $num = 4, $type = &#39;jpeg&#39;) {
 $img = imagecreate($width, $height);
 $string = &#39;&#39;;
 for ($i = 0; $i < $num; $i++) {
 $rand = mt_rand(0, 2);
 switch ($rand) {
 case 0:
 $ascii = mt_rand(48, 57); //0-9
 break;
 case 1:
 $ascii = mt_rand(65, 90); //A-Z
 break;
 case 2:
 $ascii = mt_rand(97, 122); //a-z
 break;
 }
 //chr()
 $string .= sprintf(&#39;%c&#39;, $ascii);
 }
 //背景颜色
 imagefilledrectangle($img, 0, 0, $width, $height, randBg($img));
 //画干扰元素
 for ($i = 0; $i < 50; $i++) {
 imagesetpixel($img, mt_rand(0, $width), mt_rand(0, $height), randPix($img));
 }
 //写字
 for ($i = 0; $i < $num; $i++) {
 $x = floor($width / $num) * $i + 2;
 $y = mt_rand(0, $height - 15);
 imagechar($img, 5, $x, $y, $string[$i], randPix($img));
 }
 //imagejpeg
 $func = &#39;image&#39; . $type;
 $header = &#39;Content-type:image/&#39; . $type;
 if (function_exists($func)) {
 header($header);
 $func($img);
 } else {
 echo &#39;图片类型不支持&#39;;
 }
 imagedestroy($img);
 return $string;
}
//浅色的背景
function randBg($img) {
 return imagecolorallocate($img, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));
}
//深色的字或者点这些干 扰元素
function randPix($img) {
 return imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
}
?>

輸出結果:


怎樣透過PHP來繪製圖形驗證碼?怎樣透過PHP來繪製圖形驗證碼?怎樣透過PHP來繪製圖形驗證碼? 推薦學習:《

PHP影片教學

以上是怎樣透過PHP來繪製圖形驗證碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn