找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1347|回复: 0
打印 上一主题 下一主题

PHP实现GIF图片验证码

[复制链接]

2500

主题

2513

帖子

7520

积分

论坛元老

Rank: 8Rank: 8

积分
7520
跳转到指定楼层
楼主
发表于 2018-2-14 05:41:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            这是一个用PHP生成GIF动画来实现动态图片验证码的程序,非常实用,是php用户注册登录界面经常需要用到的验证码程序,有需要GIF动态图片验证码功能的朋友可以收藏一下。
第一步:创建ImageCode.php文件,验证码生成函数代码如下:

0)      // 屏蔽第一帧
    {
      for ($k = 0; $k GetAnimation();
}
/**
* GIFEncoder类
* */
Class GIFEncoder
{
  var $GIF = "GIF89a";        /* GIF header 6 bytes    */
  var $VER = "GIFEncoder V2.06";    /* Encoder version       */
  var $BUF = Array ( );
  var $LOP = 0;
  var $DIS = 2;
  var $COL = -1;
  var $-1;
  var $ERR = Array (
    'ERR00' =>"Does not supported function for only one image!",
    'ERR01' =>"Source is not a GIF image!",
    'ERR02' =>"Unintelligible flag ",
    'ERR03' =>"Could not make animation from animated GIF source",
  );
  function GIFEncoder ($GIF_src, $GIF_dly = 100, $GIF_lop = 0, $GIF_dis = 0, $GIF_red = 0, $GIF_grn = 0, $GIF_blu = 0, $GIF_mod = 'bin' )
  {
    if (!is_array($GIF_src) && !is_array($GIF_tim))
    {
      printf ( "%s: %s", $this->VER, $this->ERR['ERR00']);
      exit( 0 );
    }
    $this->LOP = ($GIF_lop > -1) ? $GIF_lop : 0;
    $this->DIS = ($GIF_dis > -1) ? (( $GIF_dis COL = ($GIF_red > -1 && $GIF_grn > -1 && $GIF_blu > -1) ? ($GIF_red | ($GIF_grn BUF[] = fread (fopen($GIF_src [$i], "rb"), filesize ($GIF_src [$i]));
      }
      elseif(strToLower($GIF_mod) == "bin")
      {
        $this->BUF [ ] = $GIF_src [ $i ];
      }
      else
      {
        printf("%s: %s ( %s )!", $this->VER, $this->ERR [ 'ERR02' ], $GIF_mod);
        exit(0);
      }
      if (substr($this->BUF[$i], 0, 6) != "GIF87a" && substr($this->BUF [$i], 0, 6) != "GIF89a")
      {
        printf( "%s: %d %s", $this->VER, $i, $this->ERR ['ERR01']);
        exit(0);
      }
      for ($j = (13 + 3 * (2 BUF[$i]{10}) & 0x07 ))), $k = TRUE; $k; $j++)
      {
        switch ($this->BUF [$i]{$j})
        {
          case "!":
            if ((substr($this->BUF[$i], ($j + 3), 8)) == "NETSCAPE")
            {
                printf( "%s: %s ( %s source )!", $this->VER, $this->ERR ['ERR03'], ($i + 1));
                exit( 0 );
            }
            break;
            case ";":
            $k = FALSE;
            break;
        }
      }
    }
    GIFEncoder::GIFAddHeader();
    for($i = 0, $count_buf = count($this->BUF); $i BUF[0]{10}) & 0x80 )
    {
      $cmap = 3 * ( 2 BUF [ 0 ]{10} ) & 0x07 ));
      
      $this->GIF .= substr ( $this->BUF [ 0 ], 6, 7);
      $this->GIF .= substr ( $this->BUF [ 0 ], 13, $cmap);
      $this->GIF .= "!\377\13NETSCAPE2.0\3\1" . GIFEncoder::GIFWord ( $this->LOP ) . "\0";
    }
  }
  function GIFAddFrames ( $i, $d )
  {
    $Locals_str = 13 + 3 * (2 BUF[$i]{10}) & 0x07));
    $Locals_end = strlen($this->BUF[$i]) - $Locals_str - 1;
    $Locals_tmp = substr ($this->BUF[$i], $Locals_str, $Locals_end);
    $Global_len = 2 BUF [0]{10} ) & 0x07 );
    $Locals_len = 2 BUF[$i]{10}) & 0x07);
    $Global_rgb = substr($this->BUF[0], 13, 3 * (2 BUF[0]{10} ) & 0x07)));
    $Locals_rgb = substr ( $this->BUF[$i], 13, 3 * (2 BUF[$i]{10} ) & 0x07)));
    $Locals_ext = "!\xF9\x04" . chr(($this->DIS > 0) & 0xFF) . chr(($d >> 8) & 0xFF) . "\x0\x0";
    if ( $this->COL > -1 && ord($this->BUF[$i]{10}) & 0x80)
    {
      for($j = 0; $j BUF[$i]{10}) & 0x07)); $j++ )
      {
        if(ord ($Locals_rgb{3 * $j + 0}) == ($this->COL >> 0) & 0xFF && ord ( $Locals_rgb { 3 * $j + 1 } ) == ( $this->COL >> 8 ) & 0xFF && ord ( $Locals_rgb { 3 * $j + 2 } ) == ( $this->COL >> 16 ) & 0xFF )
        {
          $Locals_ext = "!\xF9\x04" . chr(($this->DIS > 0) & 0xFF) . chr (( $d >> 8) & 0xFF) . chr ($j) . "\x0";
          break;
        }
      }
    }
    switch ( $Locals_tmp { 0 } )
    {
      case "!":
        $Locals_($Locals_tmp, 8, 10);
        $Locals_tmp = substr($Locals_tmp, 18, strlen ($Locals_tmp) - 18);
        break;
      case ",":
        $Locals_($Locals_tmp, 0, 10);
        $Locals_tmp = substr($Locals_tmp, 10, strlen($Locals_tmp) - 10);
        break;
    }
    if ( ord ( $this->BUF[$i]{10} ) & 0x80 && $this->> -1 )
    {
      if ( $Global_len == $Locals_len )
      {
        if ( GIFEncoder::GIFBlockCompare ( $Global_rgb, $Locals_rgb, $Global_len ) )
        {
          $this->GIF .= ( $Locals_ext . $Locals_$Locals_tmp );
        }
        else
        {
          $byte = ord ( $Locals_img{9});
          $byte |= 0x80;
          $byte &= 0xF8;
          $byte |= ( ord ( $this->BUF [ 0 ]{10}) & 0x07);
          $Locals_img{9} = chr($byte);
          $this->GIF .= ($Locals_ext . $Locals_$Locals_rgb . $Locals_tmp);
        }
      }
      else
      {
        $byte = ord($Locals_img{9});
        $byte |= 0x80;
        $byte &= 0xF8;
        $byte |= (ord($this->BUF[$i]{10}) & 0x07);
        $Locals_{9} = chr($byte);
        $this->GIF .= ($Locals_ext . $Locals_$Locals_rgb . $Locals_tmp);
      }
    }
    else
    {
      $this->GIF .= ( $Locals_ext . $Locals_$Locals_tmp );
    }
    $this->;
  }
  function GIFAddFooter ( ) {
    $this->GIF .= ";";
  }
  function GIFBlockCompare ( $GlobalBlock, $LocalBlock, $Len )
  {
    for ( $i = 0; $i > 8 ) & 0xFF ) );
  }
   
  function GetAnimation ( )
  {
    return ($this->GIF);
  }
}
第二步:验证码生成,创建yz,并引用入文件ImageCode.php。代码如下:

第三步:调用和显示验证码,在需要添加验证码的页面加入以下代码,代码如下:


         
以上就是为大家分享的如何使用php生成动态验证码的相应代码,希望对大家的学习有所帮助。
            
            
您可能感兴趣的文章:
  • PHP生成图片验证码、点击切换实例
  • PHP使用GIFEncoder类生成的GIF动态图片验证码
  • php生成图片验证码
  • php生成数字字母的验证码图片
  • php生成图片验证码的实例讲解
  • php生成图片验证码-附五种验证码
  • php生成动态验证码gif图片
  • PHP 绘制网站登录首页图片验证码
  • php生成图片验证码的方法
  • PHP生成图片验证码功能示例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端