zoukankan      html  css  js  c++  java
  • 前端裁剪图片并上传的做法整理

    H5页面写法

    <!DOCTYPE html>
    <html>
    <body>
    <input type="file" name="file" id="file" /> 
    <script>
    var eleFile = document.querySelector('#file');
    // 压缩图片需要的一些元素和对象 var reader = new FileReader(), img = new Image(); // 选择的文件对象 var file = null; // 缩放图片需要的canvas var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); // base64地址图片加载完毕后 img.onload = function () { // 图片原始尺寸 var originWidth = this.width; var originHeight = this.height; // 最大尺寸限制 var maxWidth = 400, maxHeight = 400; // 目标尺寸 var targetWidth = originWidth, targetHeight = originHeight; // 图片尺寸超过400x400的限制 if (originWidth > maxWidth || originHeight > maxHeight) { if (originWidth / originHeight > maxWidth / maxHeight) { // 更宽,按照宽度限定尺寸 targetWidth = maxWidth; targetHeight = Math.round(maxWidth * (originHeight / originWidth)); } else { targetHeight = maxHeight; targetWidth = Math.round(maxHeight * (originWidth / originHeight)); } } // canvas对图片进行缩放 canvas.width = targetWidth; canvas.height = targetHeight; // 清除画布 context.clearRect(0, 0, targetWidth, targetHeight); // 图片压缩 context.drawImage(img, 0, 0, targetWidth, targetHeight); // canvas转为blob并上传 canvas.toBlob(function (blob) { // 图片ajax上传 var xhr = new XMLHttpRequest(); // 文件上传成功 xhr.onreadystatechange = function() { if (xhr.status == 200) { // xhr.responseText就是返回的数据 } }; // 开始上传 xhr.open("POST", 'pc.php', true); xhr.send(blob); },'image/png'); // }, file.type || 'image/png'); }; // 文件base64化,以便获知图片原始尺寸 reader.onload = function(e) { img.src = e.target.result; }; eleFile.addEventListener('change', function (event) { file = event.target.files[0]; // 选择的文件是图片 if (file.type.indexOf("image") == 0) { reader.readAsDataURL(file); } }); </script> </body> </html>

      

    php代码

    <?php
    $data = file_get_contents("php://input");
    file_put_contents("test.png",$data);
    ?>
    

      

    wxapp写法

    function uploadimg(data, urls, funsuccess, funerror ,_this){
      var that=this;
      var i=data.i?data.i:0;
      var success=data.success?data.success:0;
      var fail=data.dail?data.fail:0;
      wx.getImageInfo({
        src: data.path[i],
        success: function (res) {
          console.log(res)
          var ctx = wx.createCanvasContext('photo_canvas');
          var ratio = 2;
          var canvasWidth = res.width
          var canvasHeight = res.height;
          // 保证宽高均在800以内
          while (canvasWidth > 800 || canvasHeight > 800) {
            //比例取整
            canvasWidth = Math.trunc(res.width / ratio)
            canvasHeight = Math.trunc(res.height / ratio)
            ratio = ratio+0.5;
          }
          _this.setData({
            canvasWidth: canvasWidth,
            canvasHeight: canvasHeight
          })//设置canvas尺寸
          ctx.drawImage(data.path[i], 0, 0, canvasWidth, canvasHeight)
          ctx.draw(false,function(){
              //下载canvas图片
              setTimeout(function () {
                wx.canvasToTempFilePath({
                  canvasId: 'photo_canvas',
                  fileType: 'jpg',
                  destWidth: canvasWidth,
                  destHeight: canvasHeight,
                  quality: 1,
                  success: function (res) {
                    console.log(res)
                    var tempFilePaths = res.tempFilePath
                    wx.uploadFile({
                      url: data.url,
                      filePath: tempFilePaths,
                      name: data.name,
                      formData: data.formData,
                      success: (resp) => {
                        console.log(resp)
                        var resp = JSON.parse(resp.data);
                        if (resp.errcode == 0) {
                          success++;
                          urls.push(resp.data);
                          wx.showToast({
                            title: '上传完成第' + success + '张照片',
                            duration: 1000
                          });
                        } else {
                          fail++;
                          console.log('fail:' + i + "fail:" + fail);
                        }
                      },
                      fail: (res) => {
                        fail++;
                        console.log('fail:' + i + "fail:" + fail);
                      },
                      complete: () => {
                        i++;
                        if (i == data.path.length) { //当图片传完时,停止调用   
                          console.log('执行完毕');
                          console.log('成功:' + success + " 失败:" + fail);
                          if (fail == 0) {
                            funsuccess();
                          } else {
                            funerror();
                          }
                          return false;
                        } else {//若图片还没有传完,则继续调用函数
                          data.i = i;
                          data.success = success;
                          data.fail = fail;
                          that.uploadimg(data, urls, funsuccess, funerror,_this);
                        }
                      }
                    });
    
                  },
                  fail: function (error) {
                    console.log(error)
                  }
                })
              }, 200)
          })
          
        }
      })
    }
    

    wxml代码

    <canvas canvas-id="photo_canvas" style="{{canvasWidth}}px;height:{{canvasHeight}}px;position: absolute;left:-9999px;top:-9999px;"></canvas>
    

      

    php代码

    public function upload()
        {
            $uplad_tmp_name = $_FILES['imgfile']['tmp_name'];
            $uplad_name     = $_FILES['imgfile']['name'];
            
            $image_url      = "";
            //上传文件类型列表
            $uptypes        = array(
                'image/jpg',
                'image/jpeg',
                'image/png',
                'image/pjpeg',
                'image/gif',
                'image/bmp',
                'image/x-png'
            );
            //初始化变量
            $date           = date('ymdhis') . uniqid();
            //上传文件路径
            $img_url        = IMG_BASE_URL . date('ym') . "/";
            $img_url_data   = "data/images/" . date('ym') . "/";
            if (!is_dir($img_url_data)) {
                mkdir($img_url_data, 0777);
            }
            //如果当前图片不为空
            if (!empty($uplad_name) && in_array($_FILES["imgfile"]["type"],$uptypes)) {
                $uptype     = explode(".", $uplad_name);
                $newname    = $date . "." . end($uptype);
                $uplad_name = $newname;
                //如果上传的文件没有在服务器上存在
                if (!file_exists($img_url_data . $uplad_name)) {
                    //把图片文件从临时文件夹中转移到我们指定上传的目录中
                    $file = $img_url_data . $uplad_name;
                    move_uploaded_file($uplad_tmp_name, $file);
                    chmod($file, 0777);
                   /* 
                    include(LIB_PATH."/resize.class.php");
         			  $resizeObj = new resize($file);
         			  $resizeObj -> resizeImage(800, 9999999, 'auto');
         			  $resizeObj -> saveImage($file, 100);                
                   */
                    $img_url1 = $img_url . $newname;
                    $this->ajax_info(0, $img_url1, '上传成功');
                }
            }
        }
    

      

  • 相关阅读:
    你好,世界!
    zabbix监控系统(四)创建监控项
    zabbix监控系统(三)监控主机
    zabbix监控系统(二)登录并配置用户
    zabbix监控系统(一)zabbix安装
    python介绍
    Cohen-Sutherland裁剪算法
    eclipse安装openGL方法(完整版)
    java第一课:安装环境变量和用记事本实现Hello World
    实验二
  • 原文地址:https://www.cnblogs.com/youcle/p/9973843.html
Copyright © 2011-2022 走看看