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); } }