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

显示一个黑色背景中间白框

https://img1.sycdn.imooc.com//5b5ffc590001992312860719.jpg

求大神指导下!~


源码:

<?php
require_once 'string.func.php';
$width = 80;
$height = 28;
//创建画布
$image = imagecreatetruecolor($width,$height);
$white = imagecolorallocate($image,255,255,255);
$black = imagecolorallocate($image,0,0,0);
//用填充矩形填充画布
imagefilledrectangle($image,1,1,$width-2,$height-2,$white);
$type=1;
$length =4;
$chars = buildRandomString($type,$length);
$sess_name = "verify";
$_SESSION[$sess_name] = $chars;
$fontfiles = array("SIMYOU.TTF","STSONG.TTF","msyh.ttc","msyhbd.ttc","msyhl.ttc","simsun.ttc");

for ($i = 0; $i<$length;$i++){
    $size = mt_rand(14,18);
    $angle = mt_rand(-15,15);
    $x = 5+$i*$size;
    $y = mt_rand(20,26);
    $fontfiles="../fonts".$fontfiles[mt_rand(0,count($fontfiles)-1)];
    $color = imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
    $text = substr($chars,$i,1);
    imagettftext($image,$size,$angle,$x,$y,$color,$fontfiles,$text);
}
header("content-type:image/gif");
imagegif($image);
imagedestroy($image);



<?php
function buildRandomString($type=1,$length=4){
    if ($type == 1) {
        $chars = join ( "", range ( 0, 9 ) );
    } elseif ($type == 2) {
        $chars = join ( "", array_merge ( range ( "a", "z" ), range ( "A", "Z" ) ) );
    } elseif ($type == 3) {
        $chars = join ( "", array_merge ( range ( "a", "z" ), range ( "A", "Z" ), range ( 0, 9 ) ) );
    }
    if ($length > strlen ( $chars )) {
        exit ( "字符串长度不够" );
    }
    $chars = str_shuffle ( $chars );
    return substr ( $chars, 0, $length );
}


正在回答

7 回答

ob_clean(); //关键代码,防止出现'图像因其本身有错无法显示'的问题
加上这句,放在header前面,立马解决,我刚碰到这问题

https://img1.sycdn.imooc.com//5c9adc620001b7c006500519.jpg

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

你在最后调用的时候verifyImage(4,50,2);把参数传进去就好了,我的也有过类似问题,希望可以帮到你

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

emmm……把路径改成绝对路径就可以了,不过不知道相对路径为什么会出问题

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

同样得到问题,楼主解决了吗

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

https://img1.sycdn.imooc.com//5b653107000118a908010156.jpg我把你的代码拷贝过来试了一下,字体那块出错了,改了以后就正常了。你看看是不是字体文件写错了,或者是字体路径?

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

我也出现过这种情况  我就把header(); imagepng(); imagedestroy();这三句先注释掉,再运行就会报哪儿错了

0 回复 有任何疑惑可以回复我~
这个也是验证码的制作代码,你可以用我的参考一下
<?php
session_start();
function verifyImage($length,$pixel, $line){
    $image = imagecreatetruecolor(100,30);
    $bgcolor = imagecolorallocate($image,255,255,255);//#FFFFFFFFFFFF
    imagefill($image,0,0,$bgcolor);
    $captch_name="";
    if($length){
    for ($i=0;$i<$length;$i++){
        $fontsize = 6;
        $fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
        $data='abcdefghijkmnpqrstuvwxy3456789';
        $fontcontent=substr($data,rand(0,strlen($data)),1);
        $captch_name.="$fontcontent";
        $x = ($i * 100/4)+rand(5,10);
        $y = rand(5,10);
        imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
    }
    }
    $_SESSION['name']=$captch_name;
    if($pixel){  //随机点
        for($i=0;$i<$pixel;$i++){
            $pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
            imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);
        }
    }
    if($line){  //随机线
        for($i=0;$i<$line;$i++){
            $linecolor = imagecolorallocate($image,rand(60,220),rand(60,220),rand(60,220));
            imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
        }
    }
    header('content-type: image/png');
    imagepng($image);
//销毁
    imagedestroy($image);

}
verifyImage(4,50,2);
 ?>


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

举报

0/150
提交
取消
手把手教你实现电商网站后台开发
  • 参与学习       117294    人
  • 解答问题       1999    个

手把手教你用PHP搭建电子商务平台,由浅入深教你搭建电商系统

进入课程

显示一个黑色背景中间白框

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