[PHP] 纯文本查看 复制代码
<?php
/**
* @param int $width 宽度,默认为100
* @param int $height 高度,默认为50
* @param int $fontSize 字体的大小 默认20
* @return 图片资源
*/
function getCaptche($width=120,$height=50,$fontSize=20){
// 开启session
session_start();
// 创建画布
$img = imagecreatetruecolor($width,$height);
// 分配颜色
$color = imagecolorallocate($img,255,255,255);
// 填充颜色
imagefill($img,0,0,$color);
// 干扰点
for ($i = 0;$i < 500;$i++){
$pixColor = imagecolorallocate($img,mt_rand(100,200),mt_rand(100,200),mt_rand(100,200));
imagesetpixel($img,mt_rand(0,$width),mt_rand(0,$height),$pixColor);
}
// 干扰线
for ($i = 0;$i < 4;$i++){
$lineColor = imagecolorallocate($img,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));
imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$lineColor);
}
// 定义一个数组存放运算符号
$arr = ['+','-','*'];
// 计算数组的长度
$len = count($arr);
// 定义一个1到20的数组
$num = range(1,20);
$numLen = count($num);
// 定义一个空数组来存放随机取得的验证码
$code = [];
for ($i = 0;$i < $len;$i++) {
if ($i == 1) {
$code[] = $arr[mt_rand(0,$len-1)];
}else {
$code[] = $num[mt_rand(0,$numLen-1)];
}
}
$str = implode($code);// 将数组转为字符串
$textColor = imagecolorallocate($img,mt_rand(100,200),mt_rand(100,200),mt_rand(100,200));
$fontAngle = 0;
$x = ($width - $fontSize*3)/2;
$y = ($height - $fontSize) / 2 + $fontSize;
// 字体路径
$font = '/img/inkfree.ttf';
imagettftext($img,$fontSize,$fontAngle,$x,$y,$textColor,$font,$str);
$res = getRes($code);
// 将函数存放在session中
$_SESSION['res'] = $res;
// 输出图片
header("content-type:image/png");
imagepng($img);
}
/**
* @param $arr 一个包含运算符号的数组
* @return 返回一个运算结果
*/
function getRes($arr) {
$res = 0;
// 判断数组元素下标为1的运算符号是什么
switch ($arr[1]){
case '+':
$res = $arr[0] + $arr[2];
break;
case '-':
$sum = $arr[0] - $arr[2];
break;
case '*':
$res = $arr[0] * $arr[2];
break;
}
return $res;
}
$width = 120;
$height = 50;
$fontSize = 20;
//调用函数
getCaptche($width,$height,$fontSize);