使用php怎么实现多图上传压缩代码功能
创始人
2024-12-07 15:41:14
0次

1、先创建的一个简单的上传页面upload.php。先通过前端代码压缩图片,直接上代码




  
  
  实名验证
  
    /*
    三个参数
    file:一个是文件(类型是图片格式),
    w:一个是文件压缩的后宽度,宽度越小,字节越小
    objDiv:一个是容器或者回调函数
    photoCompress()
     */
    function photoCompress(file,w,objDiv){
      var ready=new FileReader();
      /*开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容.*/
      ready.readAsDataURL(file);
      ready.onload=function(){
        var re=this.result;
        canvasDataURL(re,w,objDiv)
      }
    }
    function canvasDataURL(path, obj, callback){
      var img = new Image();
      img.src = path;
      img.onload = function(){
        var that = this;
        // 默认按比例压缩
        var w = that.width,
          h = that.height,
          scale = w / h;
        w = obj.width || w;
        h = obj.height || (w / scale);
        var quality = 0.7; // 默认图片质量为0.7
        //生成canvas
        var canvas = document.createElement('canvas');
        var ctx = canvas.getContext('2d');
        // 创建属性节点
        var anw = document.createAttribute("width");
        anw.nodeValue = w;
        var anh = document.createAttribute("height");
        anh.nodeValue = h;
        canvas.setAttributeNode(anw);
        canvas.setAttributeNode(anh);
        ctx.drawImage(that, 0, 0, w, h);
        // 图像质量
        if(obj.quality && obj.quality <= 1 && obj.quality > 0){
          quality = obj.quality;
        }
        // quality值越小,所绘制出的图像越模糊
        var base64 = canvas.toDataURL('image/jpeg', quality);
        // 回调函数返回base64的值
        callback(base64);
      }
    }
    /**
     * 将以base64的图片url数据转换为Blob
     * @param urlData
     * 用url方式表示的base64图片数据
     */
    function convertBase64UrlToBlob(urlData){
      var arr = urlData.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
      while(n--){
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new Blob([u8arr], {type:mime});
    }
    var xhr;
    //上传文件方法
    function uploadClick() {
      document.getElementsByClassName("uploadbtn")[0].value = '上传中...';
      document.getElementsByClassName("uploadbtn")[0].disabled=true; 
      var obj = document.getElementsByClassName("myfile");
      for(var i=0;i<2;i++){
        UploadFile(obj[i].files[0],'file'+i);
      }
    }
    function UploadFile(fileObj,filed){
      var shopid = document.getElementById('shopid').value;
      var adminid = document.getElementById('adminid').value;
      var url = "newshimingupload.php"; // 接收上传文件的后台地址 
      var form = new FormData(); // FormData 对象
      if(fileObj.size/1024 > 100) { //大于100k,进行压缩上传
        photoCompress(fileObj, {
          quality: 0.2
        }, function(base64Codes){
          //console.log("压缩后:" + base.length / 1024 + " " + base);
          var bl = convertBase64UrlToBlob(base64Codes);
          form.append("file", bl, "file_"+Date.parse(new Date())+".jpg"); // 文件对象
          form.append("shopid", shopid); // 文件对象
          form.append("adminid", adminid); // 文件对象
          form.append("filed", filed); // 文件对象
          xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
          xhr.open("post", url, false); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
          xhr.onload = uploadComplete; //请求完成
          xhr.onerror = uploadFailed; //请求失败
          // xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】
          xhr.upload.onloadstart = function(){//上传开始执行方法
            ot = new Date().getTime();  //设置上传开始时间
            oloaded = 0;//设置上传开始时,以上传的文件大小为0
          };
          xhr.send(form); //开始上传,发送form数据
        });
      }else{ //小于等于1M 原图上传
        form.append("file", fileObj); // 文件对象
        form.append("shopid", shopid); // 文件对象
        form.append("adminid", adminid); // 文件对象
        form.append("filed", filed); // 文件对象
        xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
        xhr.open("post", url, false); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
        xhr.onload = uploadComplete; //请求完成
        xhr.onerror = uploadFailed; //请求失败
        xhr.upload.onloadstart = function(){//上传开始执行方法
          ot = new Date().getTime();  //设置上传开始时间
          oloaded = 0;//设置上传开始时,以上传的文件大小为0
        };
        xhr.send(form); //开始上传,发送form数据
      }
    }
    //上传成功响应
    function uploadComplete(evt) {
      //服务断接收完文件返回的结果
      var data = JSON.parse(evt.target.responseText);
      console.log(data);
      if(data.status){
        alert(data.msg);
        if(data.msg == '门店照上传成功'){
          window.location.href = "/dd_admin/index.php";
        }
      }
    }
    //上传失败
    function uploadFailed(evt) {
      alert("网络不稳定,请重新上传!");
    }
  


  
    .main{text-align: center;padding-top: 50px;}
    .main .myfile{margin-bottom: 15px;}
  

  营业执照:
  
  门店照:   
  " maxlength="15">   " maxlength="15">   
2、前端图片压缩后,请求到自定义的接口upload_deal.php.代码如下 '',       'status'=>'error',       'img_url'=>''     );     if(!is_dir($folder))     {       if(!mkdir($folder, 0777, true)){         $out['msg'] = '图片目录创建失败!';         echo json_encode($out);         exit;       }     }     $im = $_FILES[$filename]['tmp_name']; //上传图片资源     $maxwidth="1056"; //设置图片的最大宽度     $maxheight="500"; //设置图片的最大高度     $imgname = $folder.$newName; //图片存放路径 根据自己图片路径而定     $filetype=$_FILES[$filename]['type'];//图片类型     $result = thumbImage($im,$maxwidth,$maxheight,$imgname,$filetype);     if($result){       $out['msg'] = '图片上传成功';       $out['status'] = 'success';       $out['img_url'] = $folder.$newName;     }else{       $out['msg'] = '图片上传失败';     }     return json_encode($out);     exit;   }   //压缩图片   function thumbImage($im,$maxwidth,$maxheight,$name,$filetype)   {     switch ($filetype) {          case 'image/pjpeg':          case 'image/jpeg':            $im = imagecreatefromjpeg($im);  //PHP图片处理系统函数         break;          case 'image/gif':            $im = imagecreatefromgif($im);           break;          case 'image/png':            $im = imagecreatefrompng($im);           break;       case 'image/wbmp':            $im = imagecreatefromwbmp($im);           break;            }      $resizewidth_tag = $resizeheight_tag = false;     $pic_width = imagesx($im);     $pic_height = imagesy($im);     if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight))     {   $resizewidth_tag = $resizeheight_tag = false;       if($maxwidth && $pic_width>$maxwidth)       {         $widthratio = $maxwidth / $pic_width;         $resizewidth_tag = true;       }       if($maxheight && $pic_height>$maxheight)       {         $heightratio = $maxheight / $pic_height;         $resizeheight_tag = true;       }       if($resizewidth_tag && $resizeheight_tag)       {         if($widthratio < $heightratio)          $ratio = $widthratio;         else          $ratio = $heightratio;       }       if($resizewidth_tag && !$resizeheight_tag)       $ratio = $widthratio;       if($resizeheight_tag && !$resizewidth_tag)       $ratio = $heightratio;       $newwidth = $pic_width * $ratio;       $newheight = $pic_height * $ratio;       if(function_exists("imagecopyresampled"))       {         $newim = imagecreatetruecolor($newwidth,$newheight);//PHP图片处理系统函数         imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);//PHP图片处理系统函数       }       else       {         $newim = imagecreate($newwidth,$newheight);         imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);       }       switch ($filetype) {            case 'image/pjpeg' :            case 'image/jpeg' :              $result = imagejpeg($newim,$name);             break;            case 'image/gif' :              $result = imagegif($newim,$name);             break;            case 'image/png' :              $result = imagepng($newim,$name);             break;         case 'image/wbmp' :              $result = imagewbmp($newim,$name);             break;              }        imagedestroy($newim);     }     else     {       switch ($filetype) {            case 'image/pjpeg' :            case 'image/jpeg' :              $result = imagejpeg($im,$name);             break;            case 'image/gif' :              $result = imagegif($im,$name);             break;            case 'image/png' :              $result = imagepng($im,$name);             break;         case 'image/wbmp' :              $result = imagewbmp($im,$name);             break;              }     }     return $result;    }

PHP开发环境搭建工具有哪些

一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampServer也同样的也是和phpStudy一样操作简单对小白比较友好。三、XAMPP,XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包;四、MAMP,MAMP分为两种MAMP和MAMP Pro for Mac。五、宝塔面板,宝塔面板是一款服务器管理软件,支持windows和linux系统。六、UPUPW,UPUPW是目前Windows平台下最具特色的Web服务器PHP套件。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...