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

来源:3-4 session实战演示

充电_ing

2019-04-07 00:46

<?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回答

  • 充电_ing
    2019-04-07 16:19:42

    <?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://img.mukewang.com/5ca9b2950001fd0208220344.jpg

    慕粉1505...

    查看效果一片漆黑没有图片显示什么原因??

    2019-09-03 18:51:12

    共 1 条回复 >

  • 充电_ing
    2019-04-07 15:59:34

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

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

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

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

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

PHP中的会话控制

带你了解PHP中的会话控制技术。

17406 学习 · 57 问题

查看课程

相似问题