图片出不来

来源:1-7 PHP验证码制作之通过SESSION存储验证信息

notmatter

2016-05-21 19:58

就是图片出不来,求大神指点,急求http://img.mukewang.com/57404d170001050205170327.jpg

这是我的代码

<?php
      
    session_start();
      
    $image=imagecreatetruecolor(100,30);//创建一个宽100,高30的图片
   $bgcolor=imagecolorallocate($image,255,255,255);
    imagefill($image,0,0,$bgcolor);//将白色$bgcolor填充底图,从左上角填充到右上角
    
 /*   
     for($i=0;$i<4;$i++) //增加数字
     {             
     $fontsize=6;//定义数字的字体大小
     $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));//在这张图片资源上申请一个颜色,就是数字的颜色
     $fontcontent=rand(0,9);//数字的内容,随机生成0-9
      $x=($i*100/4)+rand(5,10);//坐标来标识随机数字写在哪里
      $y=rand(5,10);
     imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);//在$image的图像资源上,画随机数字
    }
*/
  $captch_code='';
   for($i=0;$i<4;$i++)//增加字母和数字
{
      $fontsize=6;
      $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
      

      $data='abcdefghijkmnpqrstuvwxyz23456789';
      $fontcontent=substr($data,rand(0,strlen($data)),1);
       
       $captch_code.=$fontcontent;   //将生成的内容加入到空字符$captch_code中
      
       $x=($i*100/4)+rand(5,10);
       $y=rand(5,10);
     imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
    }
  $_SESSION['authcode']=$captch_code;



  for($i=0;$i<200;$i++)//增加200个以内的随机点
{
     $pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));//生成点的颜色
     imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);//
}
for($i=0;$i<3;$i++)//增加线
{
     $linecolor=imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
     imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
     header('content-type: image/png');//表明输出内容的格式
    imagepng($image);//输出&image
//end
  imagedestroy($image);//销毁&image
?>



<?php
 header("content-type:text/html;charset=gb2312");
 if(isset($_REQUEST['authcode'])){
 session_start();
 if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){
 echo '<font color="#0000CC">输入正确</font>';
 }else{
 echo '<font color="#CC0000"><b>输入错误</b></font>';
 }
 exit();
 }
?>


<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8" />
       <title>确认验证码</title>
  </head>
  <body>
       <form method="post" action="./form.php">
           <p>验证码图片: <img border="1" src="./captcha.php?r=<?php echo rand();?>" width="100px" height="30px"></p>
           <p>请输入图片中的内容: <input type="text" name="authcode" value=""/></p>
           <p><input type="submit" value="提交"  style="padding:6px 20px;"></p>
       </form>
  </body>
</html>
    

写回答 关注

3回答

  • notmatter
    2016-06-02 17:39:13

    我,加了  换一个  以后又出不来了

    应该只是form改了一点吧,我看不出,你再帮我看看白,两个都贴上好了

    <?php
          
        session_start();
          
        $image=imagecreatetruecolor(100,30);//创建一个宽100,高30的图片
       $bgcolor=imagecolorallocate($image,255,255,255);
        imagefill($image,0,0,$bgcolor);//将白色$bgcolor填充底图,从左上角填充到右上角
        
     /*   
         for($i=0;$i<4;$i++) //增加数字
         {             
         $fontsize=6;//定义数字的字体大小
         $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));//在这张图片资源上申请一个颜色,就是数字的颜色
         $fontcontent=rand(0,9);//数字的内容,随机生成0-9
          $x=($i*100/4)+rand(5,10);//坐标来标识随机数字写在哪里
          $y=rand(5,10);
         imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);//在$image的图像资源上,画随机数字
        }
    */
      $captch_code='';
       for($i=0;$i<4;$i++)//增加字母和数字
    {
          $fontsize=6;
          $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
          

          $data='abcdefghijkmnpqrstuvwxyz23456789';
          $fontcontent=substr($data,rand(0,strlen($data)),1);
           
           $captch_code.=$fontcontent;   //将生成的内容加入到空字符$captch_code中
          
           $x=($i*100/4)+rand(5,10);
           $y=rand(5,10);
         imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
        }
      $_SESSION['authcode']=$captch_code;



      for($i=0;$i<200;$i++)//增加200个以内的随机点
    {
         $pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));//生成点的颜色
         imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);//
    }
    for($i=0;$i<3;$i++)//增加线
    {
         $linecolor=imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
         imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
    }
         header('content-type: image/png');//表明输出内容的格式
        imagepng($image);//输出&image
    //end
      imagedestroy($image);//销毁&image
    ?>


    <?php
     header("content-type:text/html;charset=gb2312");
     if(isset($_REQUEST['authcode'])){
     session_start();
     if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){
     echo '<font color="#0000CC">输入正确</font>';
     }else{
     echo '<font color="#CC0000"><b>输入错误</b></font>';
     }
     exit();
     }
    ?>


    <!DOCTYPE html>
    <html>
       <head>
          <meta charset="utf-8" />
           <title>确认验证码</title>
      </head>
      <body>
           <form method="post" action="./form.php">
               <p>
                 验证码图片:
                 <img id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand();?>" width="100" height="30"/>
                 <a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()">换一个?</a>
               </p>
               <p>请输入图片中的内容: <input type="text" name="authcode" value=""/></p>
               <p><input type="submit" value="提交"  style="padding:6px 20px;"></p>
           </form>
      </body>
    </html>
        

  • 追逐奔跑
    2016-05-29 11:00:30

    ok~~~不用谢


  • 追逐奔跑
    2016-05-24 21:10:21

    http://img.mukewang.com/574450bc0001275f04280158.jpg



    你好,整篇看下来,说实话没看出来,

    我就未经你的允许吧你的代码完全拷贝到我的文件中去现地做实验,是可以生成出图片的

    我估计是不是你的文件存储编码格式有差别,首先说明,我将你的代码拷贝后,所有文件的编码格式都是utf-8的,最终都生成出来了图片,你自己检查一下。

    同时,我把所有文件都存为utf-8后,我将

    <?php
     header("content-type:text/html;charset=gb2312");
     if(isset($_REQUEST['authcode'])){

    加粗地方也改成了utf-8,不然我这里显示乱码。


    ps:

        <p>验证码图片: <img border="1" src="./captcha.php?r=<?php echo rand();?>" width="100px" height="30px"></p>

    请问我加粗的地方,你为什么要加这一段代码?我有点没看懂,

    notmat...

    其实,我两天之后,又打开运行就可以出来图片了,,,,所以,原来是我网速的问题,sorry啊,那个编码方式,我的utf-8是出不来的,我的适合GB2312,下面加粗那里,是代表随机获得,我是看着视频敲的,不是很清楚。谢谢你啊

    2016-05-27 23:12:30

    共 1 条回复 >

PHP实现验证码制作

各种形态验证码核心原理与实现技巧,讲解实现过程中的技术难点

37916 学习 · 321 问题

查看课程

相似问题