1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Support\Facades\Session;
- Class CaptchaController extends Controller
- {
- public function generate()
- {
- // 生成验证码字符串
- $characters = '23456789';
- $captchaString = '';
- for ($i = 0; $i < 6; $i++) {
- $captchaString .= $characters[rand(0, strlen($characters) - 1)];
- }
- // 创建图片
- $width = 120;
- $height = 40;
- $image = imagecreate($width, $height);
- // 定义颜色
- $backgroundColor = imagecolorallocate($image, 243, 243, 243); // 背景色(浅灰色)
- $textColor = imagecolorallocate($image, 51, 51, 51); // 文本颜色(深灰色)
- $lineColor = imagecolorallocate($image, 204, 204, 204); // 干扰线颜色(浅灰色)
- // 添加干扰线(每条线的颜色随机)
- for ($i = 0; $i < 5; $i++) {
- $lineColor = 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),
- $lineColor
- );
- }
- // 添加验证码文本
- $fontSize = 5; // 字体大小,GD 内置字体大小范围是 1 到 5
- $xOffset = 10; // 起始 X 偏移
- for ($i = 0; $i < strlen($captchaString); $i++) {
- $textColor = imagecolorallocate(
- $image,
- rand(0, 150), // 随机红色分量
- rand(0, 150), // 随机绿色分量
- rand(0, 150) // 随机蓝色分量
- );
- // 随机调整每个字符的位置
- $x = $xOffset + ($i * 15) + rand(-2, 2); // 每个字符的水平位置随机微调
- $y = rand(10, $height - imagefontheight($fontSize)); // 垂直位置随机
- imagestring(
- $image,
- $fontSize,
- $x,
- $y,
- $captchaString[$i],
- $textColor
- );
- }
- // 存储验证码文本到会话
- Session::put('captcha', $captchaString);
- // 输出图片
- ob_start();
- imagepng($image);
- $imageData = ob_get_clean();
- // 释放内存
- imagedestroy($image);
- return response($imageData)->header('Content-Type', 'image/png');
- }
- }
|