imi框架是一个非常强大的 PHP+Swoole 框架,下面教大家如何在imi框架中实现自动生成图片验证码。
/**
* @Action
*/
public function vcode()
{
// 生成验证码
$width = 80;
$height = 30;
$img = imagecreatetruecolor($width, $height);
$color = imagecolorallocate($img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
imagefilledrectangle($img, 0, $height, $width, 0, $color);
// 线条
for ($i = 0; $i < 6; ++$i)
{
$color = imagecolorallocate($img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
imageline($img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $color);
}
// 雪花
for ($i = 0; $i < 100; ++$i)
{
$color = imagecolorallocate($img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
imagestring($img, mt_rand(1, 5), mt_rand(0, $width), mt_rand(0, $height), '*', $color);
}
$_x = $width / 4;
$vcode = str_pad(mt_rand(0, 9999), 4, '0', STR_PAD_LEFT); // 随机生成验证码
$font = __DIR__ . '/arial.ttf'; // 这里更换为你的字体路径
for ($i = 0; $i < 4; ++$i)
{
$fontColor = imagecolorallocate($img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
imagettftext($img, 20, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $height / 1.2, $fontColor, $font, $vcode[$i]);
}
// 生成图片二进制到变量
ob_start();
imagejpeg($img);
imagedestroy($img);
$imgContent = ob_get_clean();
// 输出响应头和图片二进制内容
$this->response->setHeader(ResponseHeader::CONTENT_TYPE, MediaType::IMAGE_JPEG)
->getBody()->write($imgContent);
return $this->response;
}
步骤解析: