在图像中为captcha创建随机曲线

时间:2014-07-21 08:05:00

标签: php gd captcha

我想创建一个脚本来创建验证码图像,类似于某些热门网站使用的验证码,如下图所示。 我已经创建了生成验证码的脚本,但我想让它有点像下面的

enter image description here

我想在图像中添加这些随机行,但我不知道如何实现它,请建议如何在PHP中执行它。或者我可以参考的任何类似的开源项目。

1 个答案:

答案 0 :(得分:5)

以下代码为您提供了做您想做的事情的起点。请注意,这比您发布的示例图像的输出更简单。

以下是4张生成的图片:

enter image description here enter image description here enter image description here enter image description here

你真正感兴趣的唯一部分是for循环,但这是一个完全有效的例子:

$im = imagecreatetruecolor(150, 75);

$bg = imagecolorallocate($im, 220, 220, 220);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);

// set background colour.
imagefilledrectangle($im, 0, 0, 150, 75, $bg);

// output text.
imagettftext($im, 35, 0, 10, 55, $black, 'arial.ttf', 'ABCD');

for ($i = 0; $i < 50; $i++) {
    //imagefilledrectangle($im, $i + $i2, 5, $i + $i3, 70, $black);
    imagesetthickness($im, rand(1, 5));
    imagearc(
        $im,
        rand(1, 300), // x-coordinate of the center.
        rand(1, 300), // y-coordinate of the center.
        rand(1, 300), // The arc width.
        rand(1, 300), // The arc height.
        rand(1, 300), // The arc start angle, in degrees.
        rand(1, 300), // The arc end angle, in degrees.
        (rand(0, 1) ? $black : $white) // A color identifier.
    );
}

header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

调整for循环的限制以及rand()调用中的最大值将影响弧的'密度'。