php-验证码类-PDO类-缩略图类

Verify.class.php 验证码类

<?php

class Verify{
    const VERIFY_TYPE_NUM=1;
    const VERIFY_TYPE_EN=2;
    const VERIFY_TYPE_BOTH=3;
    /*
     * 作用:输出验证码图片
     * 参数:$type--验证码的类型 数字-1 字母-2 数字加字母-3
     *         $fontSize---字体大小
     *         $width
     *         $height
     *         $charNum---字的个数
     *         $fontPath---字体文件路径
     */
    public static function showVerify($width=100,$height=35,$type=3,$fontSize=20,$charNum=4,$fontPath="./font/heiti.ttf"){
        //创建空白画布
        $i=imagecreatetruecolor($width,$height);
        $white=imagecolorallocate($i, 255, 255, 255);
        imagefill($i,0,0,$white);
        //产生字符库
        $content="";
        if($type==3){//数字+大小写字母
            $content=join('',array_merge(range(0,9),range('a','z'),range('A',"Z")));
        }else if($type==2){
            $content=join('',array_merge(range('a','z'),range('A',"Z")));
        }else{
            $content=join('',array_merge(range(0,9)));
        }
        //随机产生$charNum位字符
        $str=substr(str_shuffle($content),0,$charNum);
        //把字符放到session中
        $_SESSION['verify']=$str;
        //把字符逐个写在画布上
        for($j=0;$j<strlen($str);$j++){
            $char=substr($str,$j,1);
            $color=imagecolorallocate($i, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
            $y=$height-10;
            $x=(($width-20)/$charNum)*$j+10;
            imagefttext($i,$fontSize,mt_rand(-20,20),$x,$y,$color,$fontPath,$char);
        }
        //加干扰点
        for($j=1;$j<=500;$j++){
            $color=imagecolorallocate($i, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
            imagesetpixel($i,mt_rand(0,$width),mt_rand(0,$height),$color);
        }
        //加干扰线
        for($j=1;$j<=4;$j++){
            $color=imagecolorallocate($i, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
            imageline($i,0,mt_rand(0,$height),$width,mt_rand(0,$height),$color);
        }
        //输出
        imagepng($i);
    }
}

Model.class.php PDO类

<?php
class Model{
    protected $tableName;//表名
    protected $DbOb;//PDO类的对象
    function __construct(){
        $pOb=new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USERNAME,DB_PASSWORD);
        $pOb->exec("set names ".DB_CHARSET);
        $this->DbOb=$pOb;
    }
    //添加
    function add($arr){
        $kStr="";
        $kArr=array_keys($arr);
        $kStr=join(",",$kArr);
        $vStr="";
        for($i=0;$i<count($arr);$i++){
            $vStr.=",:p".$i;    
        }
        $vStr=substr($vStr,1);
        $sql="insert into {$this->tableName}($kStr) values($vStr)";
        $PS=$this->DbOb->prepare($sql);
        //绑定数据
        $vArr=array_values($arr);//索引下标 array(0=>'ttt',1=>'ccc')
        foreach($vArr as $k=>$v){//$k 0 $v ttt $k 1 $v ccc
            $name="p".$k;
            $$name=$v;
            $PS->bindParam(":p".$k,$$name,PDO::PARAM_STR);
        }
        $re=$PS->execute();
        if($re){
            return $this->DbOb->lastInsertId();
        }else{
            return false;
        }
    }
    //修改
    function save($arr,$where="",$bindArr=array()){
        //update news set title='t',content='c' where id=5
        $fvStr="";
        $i=0;
        foreach($arr as $k=>$v){
            $name="p".$i;
            $$name=$v;
            $fvStr.=",$k=:p".$i;
            $i++;
        }
        $fvStr=substr($fvStr,1);
        $where = !empty($where) ? "where ".$where : "";
        $sql="update {$this->tableName} set {$fvStr} $where";
        $PS=$this->DbOb->prepare($sql);
        //绑定数据
        for($i=0;$i<count($arr);$i++){
            $name="p".$i;
            $PS->bindParam(":p".$i,$$name,PDO::PARAM_STR);
        }
        $i=0;
        foreach($bindArr as $k=>$v){
            $name="p".$i;
            $$name=$v[0];
            if($v[1]=='int'){
                $PS->bindParam($k,$$name,PDO::PARAM_INT);
            }else{
                $PS->bindParam($k,$$name,PDO::PARAM_STR);
            }
            $i++;
        }
        return $PS->execute();
    }
    //删除  delete from 表名 where 条件
    function delete($where="",$bindArr=array()){
        $where = !empty($where) ? "where ".$where : "";
        $sql="delete from {$this->tableName} $where";
        $PS=$this->DbOb->prepare($sql);
        //绑定数据
        $i=0;
        foreach($bindArr as $k=>$v){
            $name="p".$i;
            $$name=$v[0];
            if($v[1]=='int'){
                $PS->bindParam($k,$$name,PDO::PARAM_INT);
            }else{
                $PS->bindParam($k,$$name,PDO::PARAM_STR);
            }
            $i++;
        }
        return $PS->execute();
    }
    //查询
    function select($fields="*",$where="",$limit="",$order="",$bindArr=array()){
        $where = !empty($where) ? "where ".$where : "";
        $order = !empty($order) ? "order by ".$order : "";
        $limit = !empty($limit) ? "limit ".$limit : "";
        $sql="select $fields from {$this->tableName} $where $order $limit";
        //准备执行
        $PS=$this->DbOb->prepare($sql);
        //绑定数据
        $i=0;
        foreach($bindArr as $k=>$v){
            $name="p".$i;
            $$name=$v[0];
            if($v[1]=='int'){
                $PS->bindParam($k,$$name,PDO::PARAM_INT);
            }else{
                $PS->bindParam($k,$$name,PDO::PARAM_STR);
            }
            $i++;
        }
        //执行
        $re=$PS->execute();
        if($re){//返回二维数组
            $PS->setFetchMode(PDO::FETCH_ASSOC);
            return $PS->fetchAll();    
        }else{
            return array();
        }
    }
    
}

Thumb.class.php 缩略图类

<?php
class Thumb{
    /*
     * $sPath:被缩略的图片的路径
     * $toPath:缩略图保存在哪
     * $toW:小图的宽
     * $toH:小图的高
     * $preFix:小图名字的前缀
     */
    function saveThumb($sPath,$toPath,$toW,$toH,$prefix="s_"){
        if(is_file($sPath)){
            //产生一个空白图,放缩略图
            $t=imagecreatetruecolor($toW, $toH);
            $white=imagecolorallocate($t, 255, 255, 255);
            imagefill($t,0,0,$white);
            //获取原图片的信息
            $arr=getimagesize($sPath);
            $sType=$arr['mime'];
            $sW=$arr[0];
            $sH=$arr[1];
            //产生原图片资源
            switch($sType){
                case 'image/jpeg':
                case 'image/pjpeg':
                    $s=imagecreatefromjpeg($sPath);
                    $funName="jpeg";
                    break;
                case 'image/gif':
                    $s=imagecreatefromgif($sPath);
                    $funName="gif";
                    break;
                case 'image/png':
                    $s=imagecreatefrompng($sPath);
                    $funName="png";
                    break;
                default :
                    return false;
            }
            //算出缩放的比例
            $biliW=$sW/$toW;
            $biliH=$sH/$toH;
            if($biliW>$biliH){
                $endBili=$biliW;
            }else{
                $endBili=$biliH;
            }
            //图片被缩略后的宽 高
            $tW=$sW/$endBili;
            $tH=$sH/$endBili;
            //到目标图片的位置
            $tX=($toW-$tW)/2;
            $tY=($toH-$tH)/2;
            //拷贝
            $re=imagecopyresized($t,$s,$tX,$tY,0,0,$tW,$tH,$sW,$sH);
            if($re){
                //命名
                $oldName=pathinfo($sPath,PATHINFO_BASENAME);
                $newName=$prefix.$oldName;
                //生成缩略图
                $trueFunName="image".$funName;
                $re=$trueFunName($t,$toPath."/".$newName);
                //返回结果
                return $re;
            }else{
                return false;
            }
            
        }else{
            return false;
        }
        
    }
}

 

posted @ 2015-12-29 15:45  tiandi2050  阅读(223)  评论(0编辑  收藏  举报