当前位置: 首页 > 工具软件 > IMI > 使用案例 >

在imi框架中实现生成验证码图片

壤驷麒
2023-12-01

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;
}

步骤解析:

  • 随机生成验证码
  • 用 GD 扩展生成二维码图片
  • 生成图片二进制到变量
  • 输出响应头和图片二进制内容
 类似资料: