注意需要先把php_gd2.dll放开:
php.ini文件修改。
如下验证码效果:
代码如下:
Captcha.php
<?phpnamespace vendor;class Captcha{public static function getCaptcha($width = 450, $height = 65, $length = 4, $fonts = ""){if(empty($fonts)){$fonts = 'captcha.ttf';}$fonts = __DIR__ . "/fonts/" . $fonts;$img = imagecreatetruecolor($width, $height);$bgColor = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));imagefill($img, 0, 0, $bgColor);// //增加干扰for($i = 0; $i < 50; $i++){$dotsColor = imagecolorallocate($img, mt_rand(140, 190), mt_rand(140, 190), mt_rand(140, 190));imagestring($img,mt_rand(1, 5), mt_rand(0, $width), mt_rand(0, $height), "*", $dotsColor);}for($i = 0; $i < 15; $i++){$lineColor = imagecolorallocate($img, mt_rand(80, 130), mt_rand(80, 130), mt_rand(80, 130));imageline($img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $lineColor);}
//$captcha = self::getString($length);@session_start();$_SESSION["captcha"] = $captcha;for($i = 0; $i < $length; $i++){$cColor = imagecolorallocate($img, mt_rand(15, 25), mt_rand(15, 25), mt_rand(15, 25));imagettftext($img, mt_rand(15, 25), mt_rand(-45, 45), $width / ($length + 1) * ($i + 1),mt_rand(25, $height -25), $cColor, $fonts, $captcha[$i]);}header("Content-type:image/png");imagepng($img);imagedestroy($img);}private static function getString($length = 4): string{$captcha = "";for($i = 0; $i < $length; $i++){switch(mt_rand(1, 3)){case 1: //49-57代表1-9$captcha .= chr(mt_rand(49, 57));break;case 2: //65-90代表a-z$captcha .= chr(mt_rand(65, 90));break;case 3: //97-122代表A-Z$captcha .= chr(mt_rand(97, 122));break;}}return $captcha;}}
这里我的调用是这样的:
public function captcha(){Captcha::getCaptcha();}
就可以了。