• php 图片滑动验证 貳


    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);
        }
    }
  • 相关阅读:
    DoS是什么?
    iptables的50条常用命令
    elasticsearch集成springboot详细使用
    Vim编辑器使用入门
    在线文本翻译能力新增14个直译模型,打造以中文为轴心语言的翻译系统
    代码随想录算法训练营day53|1143.最长公共子序列|1035.不相交的线|53. 最大子序和
    Amazon 文本数据提取服务-Textract对比Amazon 自然语言处理服务-Comprehend
    前端入门学习笔记四十三
    postgresql实现单主单从
    0基础,跟我一起学python--基础篇(2)
  • 原文地址:https://blog.csdn.net/yqymzj/article/details/127886848