【问题标题】:Add additional noise to Captcha image? [closed]向验证码图像添加额外的噪声? [关闭]
【发布时间】:2014-05-23 07:59:35
【问题描述】:

我从网上获得了这个简单的验证码脚本。我喜欢它,并对其进行了编辑以适合我的网站,但想知道是否有人可以对其进行编辑以在验证码本身上添加一些随机行,因为它有点太简单了。

我确实找到了有关如何做到这一点的教程,但它对我不起作用。

这是简单的验证码脚本;我很想修改它以在验证码上出现一些随机行:

   $width    = 150;
   $height   = 24;
   $length   = 5;
   $font     = 'caviardreams.ttf';
   $font_size   = 14;
   $bg_color = array(245, 245, 245);
   $chars    = 'ABCDEFGHKMNPQRSTUVWXYZ23456789';
   session_start();
   //putenv('GDFONTPATH=' . realpath('.'));
   $img = imagecreatetruecolor($width, $height);
   $bkgr = imagecolorallocate($img, $bg_color[0], $bg_color[1], $bg_color[2]);
   imagefilledrectangle($img, 0, 0, $width, $height, $bkgr);

   $code = '';
   for($i = 0; $i < $length; $i++)
   {
      $code .= $chr = $chars[mt_rand(0, strlen($chars)-1)];
      $r = rand(0, 192);
      $g = rand(0, 192);
      $b = rand(0, 192);
      $color = imagecolorallocate($img, $r, $g, $b);
      $rotation = rand(-35, 35);
      $x = 5+$i*(4/3*$font_size+2);
      $y = rand(4/3*$font_size, $height-(4/3*$font_size)/2);
      imagettftext($img, $font_size, $rotation, $x, $y, $color, $font, $chr);
   }

   $_SESSION['random_txt'] = md5($code);

   header("Content-type: image/png");
   header("Expires: Mon, 01 Jul 1998 05:00:00 GMT");
   header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
   header("Cache-Control: no-store, no-cache, must-revalidate");
   header("Cache-Control: post-check=0, pre-check=0", false);
   header("Pragma: no-cache");

   imagepng($img);
   imagedestroy($img);

【问题讨论】:

  • 为什么不直接使用已经制作好的免费验证码脚本呢?它被称为recpatcha,可从recaptcha.org获得
  • 那就是:recaptcha.org
  • 嗨,我一直在使用 recaptcha,但我现在不喜欢它,我不喜欢这样一个事实,即如果用户禁用了 javascript,它会在网页上显示得很糟糕,而且它很笨重,因此我为什么在之后放弃了 recaptcha使用它大约 2 年,我重新设计了我的网站,但它不适合我的网站,此外,我还使用验证码实现了 2 种其他方法,以帮助防止垃圾邮件机器人。如果他们不介意,我只是在找人来更改代码为我添加随机行,我不想使用我想保留的任何其他脚本,因为它很简单而且不会陷入困境。谢谢
  • 然后使用 SecurImage PHP Captcha。它在 GD 上运行良好,不需要 javascript:phpcaptcha.org
  • 嗨,我说过我不想使用任何其他脚本,谢谢,我不是在问这个,我不想听起来粗鲁,但我问是否有人可以为我修改它建议验证码脚本,我已经知道了,谢谢。

标签: php captcha gdlib


【解决方案1】:

就在之前:

$_SESSION['random_txt'] = md5($code);

插入:

for ($i=0;$i<100;$i++)
  imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),imagecolorallocate($img,rand(0,63),rand(0,63),rand(0,63)));

【讨论】:

  • 感谢 Stillstanding,非常感谢您的时间和帮助 :) 非常感谢!
【解决方案2】:

鉴于您想坚持使用该脚本,您可以查看this scripts 源代码并了解设计模式是如何实现的。抱歉,如果这不是您要找的答案。我要重点强调的部分是:

/* generate random lines in background */
/* generate random dots in background */

这两个项目似乎都在你想要做的事情上。

【讨论】:

    猜你喜欢
    • 2014-09-05
    • 2013-10-17
    • 2019-09-12
    • 1970-01-01
    • 2014-11-01
    • 2019-07-23
    • 2020-12-11
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多