CI框架用controller自己写验证码 首先嫌麻烦的话这个框架有一个自带的库 那个很很简单 但是很难看 大概是这样的
$this->load->helper('captcha');
$vals = array(
'img_path' => './captcha/',
'img_url' => base_url().'/captcha/',
'img_width' => '150',
'img_height' => 30,
'expiration' => 7200,
'word_length' => 8,
'font_size' => 16,
'img_id' => 'Imageid',
'pool' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'colors' => array(
'background' => array(255, 255, 255),
'border' => array(255, 255, 255),
'text' => array(0, 0, 0),
'grid' => array(255, 40, 40)
)
);
$cap = create_captcha($vals);
echo $cap['image'];
自己定义的验证码 然后CI框架貌似必须生成本地的引用文件名不能像引用php一样引用方法,即不能<img src=....... axxxx();这样
controller部分
public function c_test()
{
$image=imagecreatetruecolor(100, 30); //定义画板 左上角的坐标
$bgcolor=imagecolorallocate($image,255,255,255); //三原色;255*3是白板
imagefill($image,0,0,$bgcolor); //填充颜色
$captch_code=""; //保存验证码的变量
for($i=0;$i<4;$i++){ //随机4个字符 从数组里面找
$fontsize=6; //字符大小
$fontcolor=imagecolorallocate($image, rand(0,120),rand(0,120),rand(0,120)); //字符的颜色 三个随机 0-120是深色画板 为了在白板上显示清晰
$data='abcdefghijklmnpqrstuvwxy13456789'; //数组 去掉了2z 和o0
$fontcontent=substr($data,rand(0,strlen($data)),1); //开始存
$captch_code.=$fontcontent; //将获取的放到$captch_code变量里
$x=($i*100/4)+rand(5,10); //x y 的坐标 x是每次像右移动25
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); //给图片填充颜色
}
for($i=0;$i<200;$i++)
{
$pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200)); //这里是生成随机的点 200个
imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);
}
for($i=0;$i<3;$i++){
$linecolor=imagecolorallocate($image, rand(8,220), rand(80,220), rand(80,220)); //这里是生成随机的线200个
imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
$_SESSION['captch_code']=$captch_code; //$_SESSION存的验证码信息
$time = date("Ymdhisa"); //用即时的时间当作文件名
imagepng($image,"image/".$time.".png"); //生成图片到路径下
echo $time; //返回文件名字
}
View部分js
<script src="http://localhost:/secondproject/js/jquery.js"></script> //导入jquery文件 路径
<script type="text/javascript">
function cs() //ajax函数(js标签内) 加载页面的时候 然后onclick ="cs()
{
$.ajax({
url:"c_cap", //没有需要传的值 所以直接写方法就行 c_cap是上面ctroller的方法
success:function(result)
{
var kkk=result; //ajax传过来的 前面有个 空格/回车 这里给他消掉
kkk=kkk.substr(4);
document.getElementById("div1").innerHTML="<img src='http://localhost/secondproject/image/"+kkk+".png'>"; //div1是放验证码的div标签i的d
},
error:function()
{alert("error");}
})
}
</script>
<button οnclick="cs()">看不清</button>
<div id="div1">
</div>