为了账号安全,请及时绑定邮箱和手机立即绑定

运行没有报错,但是不显示图片

<?php 


/**

 * @param integer $width 宽度

 * @param  integer $[height] [高度]

 * @param  integer $[type] [1为纯数字,2为大小写字母,3为字母数字混合]

 * @param  integer $[length] [输出的验证码数量]

 * @return string [验证码字符串]

 */


//封装一个验证码函数

function test_session($width=100,$height=30,$type=3,$length=4){

//先设定一个画布资源/颜色并覆盖,这是底色图片

$image=imagecreatetruecolor($width, $height);

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

imagefilledrectangle($image, 0, 0, $width, $height, $white);

switch ($type) {

case 1:

//array_rand是随机返回($length)个数组中的键/下标值

$str=join('',array_rand(range(0,9),$length));

break;

case 2:

//array_merge是合并数组

$str=join('',array_rand(array_flip(array_merge(range('a','z'),range('A','Z'))),$length));

break;

case 3:

//array_flip是交换数组的下标和值

$str=join('',array_rand(array_flip(array_merge(range('a','z'),range('A','Z'),range(0,9))),$length));

break;

}

//设置字体

$fize='D:\wamp64\www\project01\session.test.php\STXINGKA.TTF';

//设定一个随机颜色数组

function colorrand($image){

return imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));

}

for ($i=1; $i <$length ; $i++) { 

imagefttext($image,16, mt_rand(-30,30),($width/$length)*$i, mt_rand($height-15,+15), colorrand($image),$fize,$str);

}

//设置干扰点

for($i=1;$i<200;$i++){

imagesetpixel($image, mt_rand(0,$width), mt_rand(0,$height), colorrand($image));

}

header('Conten-Type:image/png');

imagepng($image);

imagedestroy($image);

return $str;

}



 ?>

以上是我敲的代码,望指点,谢谢~!

正在回答

2 回答

<?php

/**

 * @param integer $width 宽度

 * @param  integer $[height] [高度]

 * @param  integer $[type] [1为纯数字,2为大小写字母,3为字母数字混合]

 * @param  integer $[length] [输出的验证码数量]

 * @return string [验证码字符串]

 */


//封装一个验证码函数

function test_session($width=100,$height=30,$type=2,$length=4,$fize='D:\wamp64\www\project01\session.test.php\STXINGKA.TTF'){

     //先设定一个画布资源/颜色并覆盖,这是底色图片

     $image=imagecreatetruecolor($width, $height);

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

     imagefilledrectangle($image, 0, 0, $width, $height, $white);

     switch ($type) {

         case 0:

             //array_rand是随机返回($length)个数组中的键/下标值

             $str=join('',array_rand(range(0,9),$length));

             break;

          case 1:

             //array_merge是合并数组

             $str=join('',array_rand(array_flip(array_merge(range('a','z'),range('A','Z'))),$length));

             break;

         case 2:

             //array_flip是交换数组的下标和值

             $str=join('',array_rand(array_flip(array_merge(range('a','z'),range('A','Z'),range(0,9))),$length));

             break;

     }

     //设置字体

     //设定一个随机颜色

         //$color = imagecolorallocate($image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));

         //如果把这个颜色放在设定字体的循环外面,那么所有的调用都会是一个颜色

     for($i=0; $i <$length ; $i++) {

         $color = imagecolorallocate($image,mt_rand(80,220),mt_rand(80,220),mt_rand(80,220)); 

         imagefttext($image, 16, mt_rand(-20,20), $i*$width/$length+4,mt_rand($height-15,25),$color,$fize,$str[$i]);

     }

     //设置干扰点

     //如果这个变量$color 放在了for循环外面,那么所有的点都会是一个颜色

     for($i=1;$i<200;$i++){

         $color2 = imagecolorallocate($image,mt_rand(40,255),mt_rand(40,255),mt_rand(40,255));

         imagesetpixel($image, mt_rand(0,$width), mt_rand(0,$height), $color2);

     }

     header('Content-Type:image/png');

     imagepng($image);

     imagedestroy($image);

     return $str;

    }

    //要查看效果记得调用一下函数

    test_session($width=100,$height=30,$type=2,$length=4,$fize='D:\wamp64\www\project01\session.test.php\STXINGKA.TTF');//但是在html的img src路径里调用这个函数时,这个调用可以不额外写,因为在html引用这个函数本身就是一次调用

 ?>

        单独看效果,需要额外调用一下函数https://img1.sycdn.imooc.com//5ca9b2950001fd0208220344.jpg

0 回复 有任何疑惑可以回复我~
#1

慕粉1505418636

查看效果一片漆黑没有图片显示什么原因??
2019-09-03 回复 有任何疑惑可以回复我~

自己研究了一上午,找到了几处错误借鉴一下,

  1. 是拼写错误,有些地方的拼写错了,大家仔细看一下不难发现

  2. 我在往图片上写字(用imagefttext)函数时,里面颜色选项如果是调用前面设定的数组,就会失败,但不会报错,这点是我一段一段代码排查出来的,原理我也不懂,希望有人指教一下

  3. 想要在查看这个页面的代码显示效果,需要在下面再调用一下这个函数

  4. 改进之后的代码和注释我发下面了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

运行没有报错,但是不显示图片

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信