EndRead - 后读网摘
当前位置:主页 > 技术教程 >

PHP中简单的图片验证码的制作

发布时间:2016-06-20类别:技术教程

启用PHP中的GD库:
     在php.ini中,把extension=php_gd2.dll 前的 ;去掉,重启服务器

 

函数介绍:
      imagecreagetruecolor 新建一个真彩图像  
          imagecreatetruecolor(int x_size,int y_size)   //长宽

          imagecolorallocate  调色板
          imagecolorallocate(resource image, int red, int green, int blue)   //GBK三原色

        imagestring   绘图函数
          imagestring(resource image, font, int x , int y , 内容, 颜色)

      imageline 画线函数:
          imageline(resource image, int x1, int y1, int x2, int y2, int color)

      imagesetpixel 画点函数:
          imagesetpixel(resource image , int x, int y , int color)

      imagettftext 函数调用字体写入文字
          imagegettftext((resource image, float size,float angle, int x , int y, int color, string fontfile, string text)

 

随机函数,十六进制数:
     ①、rand(int min, int max)

     ②、dechex(十进制数)  //把十进制数转变为十六进制数

 

GD+SESSION 制作PHP验证码步骤生成随机数>>创建图片>>随机数写进图片>>保存在SESSION中

     ④、保存在SESSION中
          session_start();

     ①、生成随机数
          for($i=0; $i<4; $i++){
               $rand.=dechex(rand(1,15)); 
          }

          $_SESSION[check_pic]=$rand;  //初始化一个SESSION的值

     ②、创建图片
          $im=imagecreatetruecolor(100,30);
          //设置颜色:
          $bg=imagecolorallocate($im, 0,0,0); //第一次用调色板的时候,背景颜色:
          $te=imagecolorallocate($im, 255, 255, 255);

          //线干扰
          for($i=0; $i<3,$i++){
               $te2= imagecolorallocate($im, rand(0, 255), rand(0,255), rand(0,255));
               imageline($im, rand(0,100),0,100,rand(0,15),$te2)

        }
          //点干扰
          for($i=0; $i<200;$i++){
               imagesetpixel($im, rand()%100, rand()%30,$te2);
          }

     ③、随机数写进图片
          imagestring($im,rand(1,6),rand(3,70),rand(0,15), $rand, $te);  //第二个参数代表字体,然后是x-y            轴,

          //中文字体验证码:
          $str=iconv("gbk","utr-8", "新年快乐");
          imagettftext($im, 12, 0 , 20, 20, $te, 字体.ttf, $str)  //把$str定义为数组,就可以随机输出一些汉字了!

     ⑤、输出图像:
          header("content-type: image/jpeg");
          imagejpeg($im);

 

在调用文件中增加如下代码:
    <?php
    session_start();
    if($_POST[check]){
         if($_POST[check]==$_SESSION[check_pic]){
          echo"验证码正确".$_SESSION[check_pi];
         }else{
              echo"验证码错误".$_SESSION[check_pic];
         }
    }

    ?>

    <form action="" method="post">

         <img src=che.php><br>
         <input type="text" name="check">

         <input type="submit" value="提交">

    </form>

 

    实例

<?php
    session_start();

 

    //生成一个四位的随机数:
    for($i=0; $i<4; $i++){
         $rand.=dechex(rand(1,15));
    }

 

    //初始化一个会话变量的值:
    $_SESSION[check_pic]=$rand;

 

    //创建一个图片:
    $im=imagecreatetruecolor(100,30);


     //设置颜色变量的值:
     $bg=imagecolorallocate($im, 0, 0, 0);
     $te=imagecolorallocate($im, 255, 255, 255);
 
     //线干扰:
     for($i=0; $i<5; $i++){
          $te2=imagecolorallocate($im, rand(0,255), rand(0,255),rand(0,255));
          imageline($im, rand(0,100), rand(0,30), 100, rand(0,30), $te2);
     }
  
     //点干扰:
     for($i=0; $i<200; $i++){
          imagesetpixel($im, rand()%100, rand()%30, $te2);
     }

    //把随机数写入图片:
    imagestring($im, rand(1,6), rand(5,70), rand(1,15),$rand, $te);

 

    //输出图像:
    header("content-type: image/jpeg");
    imagejpeg($im);

    ?>