充电_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;
}
?>
以上是我敲的代码,望指点,谢谢~!
<?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引用这个函数本身就是一次调用
?>
单独看效果,需要额外调用一下函数
自己研究了一上午,找到了几处错误借鉴一下,
是拼写错误,有些地方的拼写错了,大家仔细看一下不难发现
我在往图片上写字(用imagefttext)函数时,里面颜色选项如果是调用前面设定的数组,就会失败,但不会报错,这点是我一段一段代码排查出来的,原理我也不懂,希望有人指教一下
想要在查看这个页面的代码显示效果,需要在下面再调用一下这个函数
改进之后的代码和注释我发下面了
PHP中的会话控制
17406 学习 · 57 问题
相似问题