$fontcontent只是一个数字,把‘imagestring($im,$fontsize, $x,$y,$fontcontent,$fontcolor);’放进for循环里就好了,每次写一个数字,一共写四次。这里为什么不直接写一个四位数?是因为如果直接写一个四位数无法控制数字间距,而且数字会在一条线上。
这个问题解决了吗? 我也遇到了同样的情况
这些如果没有的话会有什么问题出现呢
好的我知道了<?php前面加了个空格
那个应该是浏览器的放大 : Ctrl + 鼠标滚轮 ;
win10 系统 打开 : 设置->系统->显示 中可以设置
在UTF8中, 1个汉字=3个字节。
这里存在换行,1个换行符 '\n' = 1个字节。前三个汉字正常分割,然后还有 一个换行符+1个汉字=4字节,
结果很显然,换行符吞掉了后面的两个字节。
已经找到解决办法了:把字体文件的路径赋值就好了,而不是字体文件的名称
正确:$fonttype="D:\wamp64\www\project01\STKAITI.TTF"
失败:$fonttype='STKAITI.TTF';
错误代码在上文第六行
代码是顺序执行的,你这样写是面向过程,你在for循环上边输出了图片,for循环都没有执行
是src不是scr
https://pan.baidu.com/s/1QW4tg6Om1bimjvAnuCvnaw
提取码 i10b
浏览器的原因吧
URL
$fontcontent=substr($data,rand(0,strlen($data)-1),1);
<?php
session_start();
$image=imagecreatetruecolor(100,30);//默认黑色背景
$bgcolor=imagecolorallocate($image,255,255,255);//为一副图像分配颜色
imagefill($image,0,0,$bgcolor);
//控制字体大小与分布,避免字体重叠或显示不全
/*for($i=0;$i<4;$i++){
$fontsize=6;
$fontcolor=imagecolorallocate($image,rand(0,170),rand(0,170),rand(0,170));
$fontcontent=rand(0,9);
$x=rand($i*170/4)+rand(17,55);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);//水平地画一行字符串
}*/
$captch_code="";
for($i=0;$i<4;$i++){
$fontsize=7;
$fontcolor=imagecolorallocate($image,rand(0,170),rand(0,170),rand(0,170));
$data='qwertyuipkjhgfdsaxcvbnm3456789';//可以去掉l\1\2\z\0\o
$fontcontent=substr($data,rand(0,strlen($data)),1);
$captch_code.=$fontcontent;
$x=$i*100/4+rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
$_SESSION['authcode']=$captch_code;
for($j=0;$j<200;$j++){
$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(800,200),rand(800,200),rand(800,200));
imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
header('content-type:image/png');
imagepng($image);
//end
imagedestroy($image);
?>
看看业务逻辑层的逻辑判断是否出错
谢谢了
document.getElementById('index_img')
发送标头信息,告诉浏览器
test.php和这个文件在同一目录下
你的session没销毁吧?
有可能PHP程序未接收到请求,处理超时了;
有可能浏览器缓存问题,建议在请求的地址后面加上一随机数来刷新,有效防止浏览器缓存该链接结果;
刷新验证码有两种方式:
直接刷新页面, 你可以直接F5
是自己创建的html上的控件进行刷新, 自己定义好控件的onclick方法,使用JS将img的src换掉就可以直接刷新验证码了
一般情况下,验证码的制作和使用,都是选用第二种方法的, 因为第一种方法是直接刷新页面了, 如果你的页面中填写了很多信息,这样一刷就没了; 第二种是只刷新验证码的, 不会对页面的其他地方造成影响