PHP生成图片验证码
/**
* PHP生成图片验证码
* Class VerifyImage
*/
class VerifyImage
{
// 生成随机字串
private $verifyCode;
// 图片对象
private $image;
/**
* todo:创建验证码图片
* @param int $type 类型 【1】纯数字,【2】纯字母,【3】数字加字母
* @param int $length
* @return bool|string
*/
private function createCode($type = 3, $length = 5)
{
if ($type == 1) {
$verifyCode = implode('', range(0, 9));
} elseif ($type == 2) {
$verifyCode = implode('', array_merge(range('a', 'z'), range('A', 'Z')));
} else {
$verifyCode = implode('', array_merge(range('a', 'z'), range(0, 9), range('A', 'Z')));
}
//判断生成字符是否符合要求
if (strlen($verifyCode) < $length) {
return false;
}
//打乱字符串
$verifyCode = str_shuffle($verifyCode);
return substr($verifyCode, 0, $length);
}
/**
* todo:生成图片,并加入干扰线,干扰素
* @param int $type 随机字符串类型
* @param int $length 字符长度
* @param int $width 图片宽度
* @param int $height 图片高度
*/
public function createImage($type = 3, $length = 5, $width = 80, $height = 30)
{
$verifyCode = $this->createCode($type, $length);
$image = imagecreatetruecolor($width, $height);
//白色背景
$white = imagecolorallocate($image, 255, 255, 255);
//字体颜色
$fontStyle = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));;
imagefill($image, 0, 0, $white);
// 使用默认字体,无法修改文字大小
// imagestring($image, 5, 10, 10, $verifyCode, $fontStyle);
// 导入自定义字体,修改文字大小
imagettftext($image, 24, 0, 5, 20, $fontStyle, '../Class/microsofthimalaya.ttf', $verifyCode);
//加入干扰点
for ($i = 0; $i < 80; $i++) {
$color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
imagesetpixel($image, rand(0, $width), rand(0, $height), $color);
}
//干扰线
for ($i = 0; $i < 5; $i++) {
$color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $color);
}
//输出图片
header("Content-type: image/png");
imagepng($image);
//释放资源
imagedestroy($image);
}
}