• 技术文章 >php教程 >php手册

    PHP生成GIF动态图片验证码

    2016-06-21 08:51:45原创277
      相信很多人都想过如何用PHP生成GIF动画来实现动态图片验证码,以下是实现过程。

      ImageCode函数通过GIFEncoder类实现的GIF动画的PHP源代码,有兴趣的朋友可以研究一下。

      效果如图:

      /**

      * ImageCode 生成GIF图片验证

      * @param $string 字符串

      * @param $width 宽度

      * @param $height 高度

      * */

      function ImageCode($string = '', $width = 75, $height = 25)

      {

      $authstr = $string ? $string : ((time() % 2 == 0) ? mt_rand(1000, 9999) : mt_rand(10000, 99999));

      $board_width = $width;

      $board_height = $height;

      // 生成一个32帧的GIF动画

      for($i = 0; $i < 32; $i++)

      {

      ob_start();

      $image = imagecreate($board_width, $board_height);

      imagecolorallocate($image, 0,0,0);

      // 设定文字颜色数组

      $colorList[] = ImageColorAllocate($image, 15,73,210);

      $colorList[] = ImageColorAllocate($image, 0,64,0);

      $colorList[] = ImageColorAllocate($image, 0,0,64);

      $colorList[] = ImageColorAllocate($image, 0,128,128);

      $colorList[] = ImageColorAllocate($image, 27,52,47);

      $colorList[] = ImageColorAllocate($image, 51,0,102);

      $colorList[] = ImageColorAllocate($image, 0,0,145);

      $colorList[] = ImageColorAllocate($image, 0,0,113);

      $colorList[] = ImageColorAllocate($image, 0,51,51);

      $colorList[] = ImageColorAllocate($image, 158,180,35);

      $colorList[] = ImageColorAllocate($image, 59,59,59);

      $colorList[] = ImageColorAllocate($image, 0,0,0);

      $colorList[] = ImageColorAllocate($image, 1,128,180);

      $colorList[] = ImageColorAllocate($image, 0,153,51);

      $colorList[] = ImageColorAllocate($image, 60,131,1);

      $colorList[] = ImageColorAllocate($image, 0,0,0);

      $fontcolor = ImageColorAllocate($image, 0,0,0);

      $gray = ImageColorAllocate($image, 245,245,245);

      $color = imagecolorallocate($image, 255,255,255);

      $color2 = imagecolorallocate($image, 255,0,0);

      imagefill($image, 0, 0, $gray);

      $space = 15; // 字符间距

      if($i > 0) // 屏蔽第一帧

      {

      for ($k = 0; $k < strlen($authstr); $k++)

      {

      $colorRandom = mt_rand(0,sizeof($colorList)-1);

      $float_top = rand(0,4);

      $float_left = rand(0,3);

      imagestring($image, 6, $space * $k, $top + $float_top, substr($authstr, $k, 1), $colorList[$colorRandom]);

      }

      }

      for ($k = 0; $k < 20; $k++)

      {

      $colorRandom = mt_rand(0,sizeof($colorList)-1);

      imagesetpixel($image, rand()%70 , rand()%15 , $colorList[$colorRandom]);

      }

      // 添加干扰线

      for($k = 0; $k < 3; $k++)

      {

      $colorRandom = mt_rand(0, sizeof($colorList)-1);

      // $todrawline = rand(0,1);

      $todrawline = 1;

      if($todrawline)

      {

      imageline($image, mt_rand(0, $board_width), mt_rand(0,$board_height), mt_rand(0,$board_width), mt_rand(0,$board_height), $colorList[$colorRandom]);

      }

      else

      {

      $w = mt_rand(0,$board_width);

      $h = mt_rand(0,$board_width);

      imagearc($image, $board_width - floor($w / 2) , floor($h / 2), $w, $h, rand(90,180), rand(180,270), $colorList[$colorRandom]);

      }

      }

      imagegif($image);

      imagedestroy($image);

      $imagedata[] = ob_get_contents();

      ob_clean();

      ++$i;

      }

      $gif = new GIFEncoder($imagedata);

      Header ('Content-type:image/gif');

      echo $gif->GetAnimation();

      }

      有关GIFEncoder类,可在网络中得到下载~



    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php mysql 事务:php/ mysql 执行事务实例 下一篇:图文并茂PHP跟老大的对话
    PHP编程就业班

    相关文章推荐

    • phpcms模块开发之swfupload的使用介绍• 在Windows系统上安装PHP运行环境文字教程• dedecms 制作模板中使用的全局标记图文教程• 让PHP支持页面回退的两种方法[转]• 第十四节 命名空间 [14]

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网