$fontcontent只是一个数字,把‘imagestring($im,$fontsize, $x,$y,$fontcontent,$fontcolor);’放进for循环里就好了,每次写一个数字,一共写四次。这里为什么不直接写一个四位数?是因为如果直接写一个四位数无法控制数字间距,而且数字会在一条线上。
好的我知道了<?php前面加了个空格
代码是顺序执行的,你这样写是面向过程,你在for循环上边输出了图片,for循环都没有执行
浏览器的原因吧
防止浏览器缓存。
session是在同一浏览器中存在的。举个例子,我打开两个浏览器——IE和Google,分别进行你的操作,为这两个浏览器的表单填入对应的验证码,都可以通过。
so,只有在同一浏览器中才会存在session覆盖问题。
首先在创建完画布、分配颜色、填充、循环添加字符串之后,一定要用header('content-type:image/png')告诉浏览器要输出一个png图像,然后就是渲染的字符要用对函数,一般来讲显示数字和字母用imagestring()即可,还有就是查看php.ini的GD库有没打开。
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
你的写成了$color;
这个就显示出来了
我发现了,哈哈,image出错了
一个是用给定量让机器算,另一个的25是自己人工算了放进去的啊;前者在更改地图大小以及更改显示数字量变化上可以更灵活,而且这样写也更合规范。
http://php.net/manual/zh/function.imagestring.php 这里font只用1--5 最大就是5了 如果你想要更大的话可以使用imagettftext:array ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text); 参数分别为 image,字体大小,角度 0代表水平,颜色,字体文件名 这里可以引用字体文件,内容。
示例:
$fontcontent=rand(0,9);
$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
$x=($i*100/4)+rand(5,10);
$y=rand(15,30);
imagettftext($image, 20, 0, $x, $y, $fontcolor ,'../fonts/BebasNeue-webfont.ttf', $fontcontent);
因为定义的长宽是100*30
你代码不贴出来谁知道是不是代码出问题了,显示不出验证码原因多的很,你这样能问出东西么?你这样问还不如去百度一下。
浏览器版本的问题吧,我的也是这样,但是影响不大啊
只有这张图片
imagestring 函数的 第二个参数 $fontsize 只有 1 - 5 可选
为什么你的代码在我这里是可以的,,
这个$X,$Y的坐标是绘制文字的左上角坐标
Y高度是30 要能在背景里 $Y值+文字的高度要<30; 所以rand(5,20)会超出范围
X于此类似 因为X方向最长是100总共4个字符 100/4是每个字符的间距 用在循环中就表示 4个的起始点分别是0,25 ,50,75 然后再加上随机数有浮动效果
imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ) 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
你的一个是$Y一个是$y!!!!!!