• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php处理多图上传压缩代码功能

    网上看了一些资料,关于处理图片压缩的,找到的大部分是单图压缩的,要么是单前端或者后端的,所以就自己整了下前后端压缩,并支持多图的压缩图片实例。代码有点多,直接复制到编辑器看会比较清楚

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

    !DOCTYPE html>
    html>
    head>
      meta charset="UTF-8">
      meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
      title>实名验证/title>
      script type="text/javascript">
        /*
        三个参数
        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;i2;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("网络不稳定,请重新上传!");
        }
      /script>
    /head>
    body>
      style type="text/css">
        .main{text-align: center;padding-top: 50px;}
        .main .myfile{margin-bottom: 15px;}
      /style>
    div class="main">
      营业执照:
      input type="file" class="myfile" id="file1" name="file1" accept="image/x-png, image/jpg, image/jpeg, image/gif"/>br>
      门店照:
      input type="file" class="myfile" id="file2" name="file2" accept="image/x-png, image/jpg, image/jpeg, image/gif"/>br>
      input type="hidden" id="shopid" name="shopid" value="?php echo $_GET['shopid']; ?>" maxlength="15">
      input type="hidden" id="adminid" name="adminid" value="?php echo $_GET['adminid']; ?>" maxlength="15">
      input style="margin-top: 25px;" class="uploadbtn" type="button" onclick="uploadClick()" value="上传" />br>
    /div>
    /body>
    /html>
    2、前端图片压缩后,请求到自定义的接口upload_deal.php.代码如下
    ?php
    require_once('public_func.php');
      actionUpload('uploads/','file'); //参数分别代表图片存储的路径和上传的文件名
    }
    3、在第二部引入public_func.php,这块代码主要是对后端处理图片压缩
    function actionUpload($path = '/uploads/',$filename='myFile')
      {
        // $path = 'uploads/';  //图片存放根目录 根据自己项目路径而定
        $file = $_FILES[$filename]['name'];
        $folder = $path.date('Ymd')."/";
        $pre = rand(999,9999).time();
        $ext = strrchr($file,'.');
        $newName = $pre.$ext;
        $out = array(
          'msg'=>'',
          '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处理多图上传压缩代码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • ajax上传图片到PHP并压缩图片显示的方法
    • php上传图片并压缩的实现方法
    • PHP实现图片上传并压缩
    上一篇:Laravel框架使用Seeder实现自动填充数据功能
    下一篇:php中html_entity_decode实现HTML实体转义
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php处理多图上传压缩代码功能 php,处理,多图,上传,压缩,