tp6方式:
注意:验证后销毁保存的图片(背景图和滑动图)
generator();
//生成滑动图
$huadong = $imageDragAuth->createDragbleImg();
//生成背景图
$beijing = $imageDragAuth->createBgImg();
echo json_encode(array('status' => 0,'huadong' => '/'.$huadong,'biejing'=>'/'.$beijing,'y'=>$_SESSION['imageDragAuthY'].'px'));
}
/**
* 滑动验证
*/
public function valid(){
require './../app/sdk/ImageDragAuth.php';
$imageDragAuth = new \imageDragAuth(imagecreatefromjpeg('static/img/1.jpg'), imagecreatefrompng('static/img/3.png'), imagecreatefrompng('static/img/2.png'), 65280);
$result = $imageDragAuth->validation($_GET['x'], $_GET['y']);
echo json_encode(array('status' => $result,'msg' => $result ? '验证成功' : '验证失败','y' => $_SESSION['imageDragAuthY'].'px'));
}
}
滑动图片验证类:
backgroundImgSrc = $backgroundImgSrc;
$this->fillImgSrc = $fillImgSrc;
$this->transparentImgSrc = $transparentImgSrc;
$this->colorTransparentInt = $colorTransparentInt;
$this->sessionXname = $sessionXname;
$this->sessionYname = $sessionYname;
}
/**
* 生成验证码,其实就是生成x坐标和y坐标,原理是一样的都存在服务器端的session里面
* @param $stepSession 分步验证时候往session记录的session名
* @return what return
* @author Jobs Fan
* @date: 下午3:25:20
*/
public function generator($stepSession = 'setpSession')
{
$bgX = imagesx($this->backgroundImgSrc);
$bgY = imagesy($this->backgroundImgSrc);
$smX = imagesx($this->transparentImgSrc);
$smY = imagesy($this->transparentImgSrc);
$randX = rand(5,($bgX - $smX -5));
$randY = rand(5,($bgY - $smY - 5));
$_SESSION[$this->sessionXname] = $randX;
$_SESSION[$this->sessionYname] = $randY;
$_SESSION[$stepSession] = false;
}
/**
* 验证码验证
* @param $x 用户通过ajax提交上来的x坐标值
* @param $y 用户通过ajax提交上来的y坐标值
* @param $threshold 容错阈值
* @param $stepSession 分步验证时候往session记录的session名
* @return boolean
* @author Jobs Fan
* @date: 下午3:39:37
*/
public function validation($x,$y,$threshold=4,$stepSession = 'setpSession')
{
$x = (int) $x;
$y = (int) $y;
if (!$x || !$y || !isset($_SESSION[$this->sessionXname]) || !isset($_SESSION[$this->sessionYname]))
{
$this->generator();
return false;
}
if ($x >= $_SESSION[$this->sessionXname] - $threshold && $x <= $_SESSION[$this->sessionXname] + $threshold && $y >= $_SESSION[$this->sessionYname] - $threshold && $y <= $_SESSION[$this->sessionYname] + $threshold)
{
$this->generator();
$_SESSION[$stepSession] = true; //用户后面步骤的验证
return true;
}
else
{
$this->generator();
return false;
}
}
/**
* 生成背景图
* @param $x generator方法返回的x值
* @param $y generator方法返回的y值
* @return 直接输出图片
* @author Jobs Fan
* @date: 下午4:08:56
*/
public function createBgImg()
{
header('Content-type: image/png');
$bgX = imagesx($this->backgroundImgSrc);
$bgY = imagesy($this->backgroundImgSrc);
$smX = imagesx($this->fillImgSrc);
$smY = imagesy($this->fillImgSrc);
$background = imagecreatetruecolor($bgX,$bgY);
imagecopy($background, $this->backgroundImgSrc, 0, 0, 0, 0, 868, 390);
imagecopy($background, $this->fillImgSrc, (int)($_SESSION[$this->sessionXname]), (int)($_SESSION[$this->sessionYname]), 0, 0, $smX, $smY);
// imagepng($background);
// 把图片保存到本地
$path = 'static/img/hua/'.date('YmdHis').rand(10000,99999).'.png';
imagepng($background,$path);
//销毁内存中的图片
imagedestroy($background);
$path = str_replace("\\", '/', $path);
return $path;
}
/**
* 生成前景图,也就是鼠标拖动的图
* @param $x generator方法返回的x值
* @param $y generator方法返回的y值
* @return 直接输出图片
* @author Jobs Fan
* @date: 下午4:15:25
*/
public function createDragbleImg()
{
header('Content-type: image/png');
//imagesx — 取得图像宽度
//imagesy — 取得图像高度
//用法 int imagesy ( resource $image )
$bgX = imagesx($this->backgroundImgSrc); //868
$bgY = imagesy($this->backgroundImgSrc); //390
$smX = imagesx($this->transparentImgSrc); //149
$smY = imagesy($this->transparentImgSrc); //149
//imagecreatetruecolor — 新建一个真彩色图像
//用法 resource imagecreatetruecolor ( int $width , int $height )
$background = imagecreatetruecolor($bgX,$bgY);
//
imagecopy($background, $this->backgroundImgSrc, 0, 0, 0, 0, $bgX, $bgY);
imagecopy($background, $this->transparentImgSrc, (int)($_SESSION[$this->sessionXname]), (int)($_SESSION[$this->sessionYname]), 0, 0, $smX, $smY);
$imgCrop = imagecrop($background, array('x' => (int)($_SESSION[$this->sessionXname]),'y' => (int)($_SESSION[$this->sessionYname]), 'width' => $smX, 'height' => $smY));
imagecolortransparent($imgCrop,65280);
// 把图片保存到本地
$path = 'static/img/hua/'.date('YmdHis').rand(10000,99999).'.png';
imagepng($imgCrop,$path);
//销毁
imagedestroy($imgCrop);
$path = str_replace("\\", '/', $path);
return $path;
}
/**
* @name 删除 验证码图片
*/
public function delete_img($path)
{
unlink($path);
}
}