• PHP图片上传功能 基于jquery.Jcrop.js 多图片上传 公共引用文件


    demo.php演示文件:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
       <body >
         
        <form method="post" action="save.php" >
    
         
            <script>
                //上传图片功能 打开隐藏层
                function upload_pic(x){
    
                    document.getElementById('upload_hide_'+x).style.display='block';
    
                }
            </script>
    
            上传图片:<input name="pic1" id="pic1" readonly style="background-color:#cccccc;"> <a href="javascript:upload_pic('pic1');">上传</a>
            <div id="upload_hide_pic1" style="360px;height:40px; border:1px solid cccccc;background:#f1f1f1;margin:5px;display:none;">
                   <iframe scrolling="no" frameborder="0" src="form.php?backid=pic1" width="100%" height="30"></iframe>
             </div>
    
            <br>
    
    
            上传图片2:<input name="pic2" id="pic2" readonly style="background-color:#cccccc;"> <a href="javascript:upload_pic('pic2');">上传</a>
            <div id="upload_hide_pic2" style="360px;height:40px; border:1px solid cccccc;background:#f1f1f1;margin:5px;display:none;">
                  <iframe scrolling="no" frameborder="0" src="form.php?backid=pic2" width="100%" height="30"></iframe>
             </div>
    
            <br>
    
    
    
            <input type="submit" value="确定"/> 
        
        </form>
     
     
    </html>


    form.php

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <script>
    	//提交验证
    	function chk(){
    
    		if(document.getElementById('file').value=='')
    		{
    			alert('选择图片');
    			return false;
    		}
    	}
    </script>
    	</head>
       <body>
    	 
        <form method="post" action="upload.php?act=upload" onsubmit="return chk();" enctype="multipart/form-data" >
    	   	<input type="file" name="file" id="file">
    	   	<input type="text" name="backid" value="<?php echo $_GET[backid]?>" style="display:none;">
    		<input type="submit" value="开始上传"/> 
    	    
        </form>
     
     </body>
    </html>
    

      类库文件:image.class.php

    <?php
    class Images{
        var $inputName;                 //控件名
        var $allowType = array(
                    'image/gif','image/jpg','image/jpeg','image/png','image/x-png','image/pjpeg'
        );                               //上传类型
        var $allowSize = 2097152;    //限制大小
        var $saveDir = "./uploads";      //保存目录
        var $isRename = true;               //是否重命名,默认为true
        var $errID = 0;                     //错误代码,默认为0
        var $errMsg = "";                   //错误信息
        var $savePath = "";                 //保存路径
    
        function __construct($inputName,$allowType="",$allowSize="",$saveDir="",$isRename=true){
            if(empty($inputName)){
                $this->chk_err(-1);       //无传入控件名
            }else{
                $this->inputName = $inputName;
            }
    
            if(!empty($allowType)) $this->allowType = $allowType;
            if(!empty($allowSize)) $this->allowSize = $allowSize;
            if(!empty($saveDir)) $this->saveDir = $saveDir;
            if(!empty($isRename)) $this->isRename = $isRename;
        }
    
        function is_uploaded(){
            if(empty($_FILES[$this->inputName]['name'])){
                $this->chk_err(4);    //没有文件被上传
            }else{
                if(is_uploaded_file($_FILES[$this->inputName]['tmp_name'])){
                    return true;
                }else{
                    $this->chk_err(-2);       //文件上传不合法
                }
            }
        }
    
        function chk_type(){
            if(!in_array($_FILES[$this->inputName]['type'],$this->allowType)){
                $this->chk_err(-3);         //上传的文件类型不被允许
            }else{
                return true;
            }
        }
    
        function chk_size(){
            if($_FILES[$this->inputName]['size'] > $this->allowSize){
                $this->chk_(-4);          //上传的文件过大
            }else{
                return true;
            }
        }
    
        function move_uploaded(){        //移动上传文件
            if(!$this->is_uploaded()){
                return false;
            }
    
            if(!$this->chk_size()){
                return false;
            }
    
            if(!$this->chk_type()){
                return false;
            }
    
            //重命名
            if($this->isRename){
                $arrTmp = pathinfo($_FILES[$this->inputName]['name']);
                $extension = strtolower($arrTmp['extension']);
                $file_newname = date("YmdHis").rand(1000,9999)."00.".$extension; //重命名新文件, 00表示为上传的为原图
            }else{
                $file_newname = $_FILES[$this->inputName]['name'];
            }
            
            if(!file_exists($this->saveDir)){       //判断保存目录是否存在
                mkdir($this->saveDir,0777,true);    //建立保存目录
            }
    
            //移动文件
            $result = move_uploaded_file($_FILES[$this->inputName]['tmp_name'],$this->saveDir."/".$file_newname);
    
            if($result){
                $path = $this->savePath = $this->saveDir."/".$file_newname;        //文件的成功保存路径
                return $path;
            }else{
                $this->chk_err($_FILES[$this->inputName]['error']);
            }
        
        }
    
        //判断出错信息
        function chk_err($errID){
            $this->errID = $errID;
            switch($this->errID){
                case -4:
                    $this->errMsg = "上传的文件过大";
                    break;
                case -3:
                    $this->errMsg = "上传的文件类型不被允许";
                    break;
                case -2:
                    $this->errMsg = "文件上传不合法";
                    break;
                case -1:
                    $this->errMsg = "无控件名传入";
                    break;
                case 1:
                    $this->errMsg = '上传的文件超出了php.ini中upload_max_filesize设定的最大值';
                    break;
                case 2:
                    $this->errMsg = '上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值';
                    break;
                case 3:
                    $this->errMsg = '文件只有部分被上传';
                    break;
                case 4:
                    $this->errMsg = '没有文件被上传';
                    break;
                default:
                    break;
            }
            return false;
        
        }
    
        function get_errMsg(){
            echo $this->errMsg;  //输出错误信息
        }
    
        /**
         +----------------------------------------------------------
         * 取得图像信息
         *
         +----------------------------------------------------------
         * @static
         * @access public
         +----------------------------------------------------------
         * @param string $image 图像文件名
         +----------------------------------------------------------
         * @return mixed
         +----------------------------------------------------------
         */
        function getImageInfo($img) {
            $imageInfo = getimagesize($img);
            if( $imageInfo!== false) {
                $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]),1));
                $imageSize = filesize($img);
                $info = array(
                    "width"        =>$imageInfo[0],
                    "height"    =>$imageInfo[1],
                    "type"        =>$imageType,
                    "size"        =>$imageSize,
                    "mime"        =>$imageInfo['mime'],
                );
                return $info;
            }else {
                return false;
            }
        }
    
        /**
         +----------------------------------------------------------
         * 生成缩略图
         +----------------------------------------------------------
         * @static
         * @access public
         +----------------------------------------------------------
         * @param string $image  原图
         * @param string $type 图像格式
         * @param string $thumbname 缩略图文件名
         * @param string $maxWidth  宽度
         * @param string $maxHeight  高度
         * @param string $position 缩略图保存目录
         * @param boolean $interlace 启用隔行扫描
         * @param boolean $is_save 是否保留原图
         +----------------------------------------------------------
         * @return void
         +----------------------------------------------------------
         */
         
        function thumb($image,$is_save=true,$suofang=0,$type='',$maxWidth=500,$maxHeight=500,$interlace=true){
            // 获取原图信息
           $info  = $this->getImageInfo($image);
             if($info !== false) {
                $srcWidth  = $info['width'];
                $srcHeight = $info['height'];
                $type = empty($type)?$info['type']:$type;
                $type = strtolower($type);
                $interlace  =  $interlace? 1:0;
                unset($info);
                if ($suofang==1) {
                    $width  = $srcWidth;
                    $height = $srcHeight;
                } else {
                    $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例
                    if($scale>=1) {
                        // 超过原图大小不再缩略
                        $width   =  $srcWidth;
                        $height  =  $srcHeight;
                    }else{
                        // 缩略图尺寸
                        $width  = (int)($srcWidth*$scale);    //147
                        $height = (int)($srcHeight*$scale);    //199
                    }
                }
                // 载入原图
                $createFun = 'ImageCreateFrom'.($type=='jpg'?'jpeg':$type);
                $srcImg     = $createFun($image);
    
                //创建缩略图
                if($type!='gif' && function_exists('imagecreatetruecolor'))
                    $thumbImg = imagecreatetruecolor($width, $height);
                else
                    $thumbImg = imagecreate($width, $height);
    
                // 复制图片
                if(function_exists("ImageCopyResampled"))
                    imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);
                else
                    imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height,  $srcWidth,$srcHeight);
                if('gif'==$type || 'png'==$type) {
                    //imagealphablending($thumbImg, false);//取消默认的混色模式
                    //imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息
                    $background_color  =  imagecolorallocate($thumbImg,  0,255,0);  //  指派一个绿色
                    imagecolortransparent($thumbImg,$background_color);  //  设置为透明色,若注释掉该行则输出绿色的图
                }
                // 对jpeg图形设置隔行扫描
                if('jpg'==$type || 'jpeg'==$type)     imageinterlace($thumbImg,$interlace);
                //$gray=ImageColorAllocate($thumbImg,255,0,0);
                //ImageString($thumbImg,2,5,5,"ThinkPHP",$gray);
                // 生成图片
                $imageFun = 'image'.($type=='jpg'?'jpeg':$type); 
                $length = strlen("00.".$type) * (-1);
                $_type = substr($image,-4);
                $length = ($type != $_type ? $length+1 : $length);
                //裁剪
                if ($suofang==1) {
                    
                    $thumbname01 = substr_replace($image,"01.".$type,$length);        //小图片
                    $thumbname02 = substr_replace($image,"02.".$type,$length);        //中图片
     
    
                    $imageFun($thumbImg,$thumbname01,100);
                    $imageFun($thumbImg,$thumbname02,100);
         
    
    
                    $thumbImg01 = imagecreatetruecolor(80,60);
                    imagecopyresampled($thumbImg01,$thumbImg,0,0,$_POST['x'],$_POST['y'],80,60,$_POST['w'],$_POST['h']);
    
                    $thumbImg02 = imagecreatetruecolor(120,90);
                    imagecopyresampled($thumbImg02,$thumbImg,0,0,$_POST['x'],$_POST['y'],120,90,$_POST['w'],$_POST['h']);
    
     
    
    
                    $imageFun($thumbImg01,$thumbname01,100);
                    $imageFun($thumbImg02,$thumbname02,100);
     
                    
                    imagedestroy($thumbImg01);
                    imagedestroy($thumbImg02);
                    imagedestroy($thumbImg);
                    imagedestroy($srcImg);
    
                    return array('small' => $thumbname01 , 'middle' => $thumbname02);    //返回包含大小头像路径的数组
                }else{
                    if($is_save == false){                                            //缩略图覆盖原图,缩略图的路径还是原图路径
                        $imageFun($thumbImg,$image,100);
                    }else{
                        $thumbname03 = substr_replace($image,"03.".$type,$length);    //缩略图与原图同时存在,
                        $imageFun($thumbImg,$thumbname03,100);
    
                        imagedestroy($thumbImg);
                        imagedestroy($srcImg);
                        return $thumbname03 ;                    //返回缩略图的路径,字符串
                    }
                }
    
             }
             return false;
        }
    }
    ///***************
    //        ----->上传到服务器上的原始图
    //        ----->裁剪的大图 600*400
    //        ----->裁剪的中图 86*75
    //        ----->裁剪的小图 50*50
    //        ----->超过规定尺寸后的缩略图

    upload.php

    <?php
    // error_reporting(0);               //设置报错级别
    date_default_timezone_set("PRC"); //设置默认时区
    require_once("./image.class.php"); //引用图片上传类
    
    $images = new Images("file");     //创建对象
    
        if(isset($_GET['act']) && $_GET['act'] == "upload"){
            
               $path = $images->move_uploaded();
               $images->thumb($path,false,0);    //文件比规定的尺寸大则生成缩略图,小则保持原样
            
               if($path == false){ //没有图片路径时
    
                  //$images->get_errMsg();
    ?>
    
                <script>
                    window.parent.document.getElementById("<?php echo $_POST[backid];?>").value='<?php echo "";?>';
                    window.parent.document.getElementById("upload_hide_<?php echo $_POST[backid];?>").style.display='none';
    
                </script>
    
    <?php
      
               }else{
    
                   ?>
    
    
                <script>
                    window.parent.document.getElementById("<?php echo $_POST[backid];?>").value='<?php echo str_replace('./','/',$path);?>';
                    window.parent.document.getElementById("upload_hide_<?php echo $_POST[backid];?>").style.display='none';
                </script>
    
    
                   <?php
     
                 
               }
         
        }  
    ?>
  • 相关阅读:
    同一内网不能网段ping 不通
    mysql 5.6.33 重置密码后报错
    设置tomcat内存设定
    python 取两数的百分比
    cache buffers
    登录到mysql查看binlog日志
    mysqlbinlog 查看日志时发生报错
    find 查找文件 -exec 然后压缩 查看tar包的内容
    zip 压缩文件 unzip查看zip压缩包内的内容
    react-native 完整实现登录功能
  • 原文地址:https://www.cnblogs.com/zhaoguoliang/p/2824383.html
Copyright © 2020-2023  润新知