利用H5Canvas进行前端图片压缩再上传笔记

来源:互联网 发布:jquery清空input数据 编辑:程序博客网 时间:2024/05/01 21:32

前端代码如下:

//---------------------压缩图片上传插件---------------------------var ImgFileGet_class = function(msg){    this.fileSelector = msg.fileSelector;  //file-input的选择器    this.preViewImgSelector = msg.preViewImgSelector;  //图片预览选择器    this.max_size = msg.max_size || false;  //图片最大大小,不设为无限度    this.ajaxInterace = msg.ajaxInterace; //ajax上传图片插件    var _this = this;    $(this.fileSelector).change(function(){        var reader = new FileReader();        var file = this.files[0];        reader.onload = function(e){          var com_rate = 1;          if((_this.max_size!==false) && (file.size>_this.max_size)){              com_rate =  _this.max_size/file.size;          }          _this.compressImg(e.target.result,com_rate,function(src_data){              _this.preViewImgSelector && $(_this.preViewImgSelector).attr('src',src_data);              if(_this.ajaxInterace){                _this.ajaxInterace(src_data);              }          });        }        reader.readAsDataURL(file);    });    this.compressImg = function(imgData,com_rate,onCompress){          if(!imgData)return;          onCompress = onCompress || function(){};          com_rate = com_rate || 1;//压缩比率默认为1          var img = new Image();          img.onload = function(){               if(com_rate!=1) {//按最大高度等比缩放                var rate = Math.sqrt(com_rate);                img.width  *= rate;                 img.height *= rate;               }              var canvas = document.createElement('canvas');              var ctx = canvas.getContext("2d");               canvas.width =  img.width;               canvas.height = img.height;               //ctx.drawImage(img, 0, 0);              ctx.clearRect(0, 0, canvas.width, canvas.height); // canvas清屏              //重置canvans宽高 canvas.width = img.width; canvas.height = img.height;              ctx.drawImage(img, 0, 0, img.width, img.height); // 将图像绘制到canvas上               onCompress(canvas.toDataURL("image/jpeg"));//必须等压缩完才读取canvas值,否则canvas内容是黑帆布          };         //记住必须先绑定事件,才能设置src属性,否则img没内容可以画到canvas        img.src = imgData;    }}var ImgFileGet = new ImgFileGet_class({  fileSelector:"#file-in",  //fileInput选择器  preViewImgSelector:"#pre-img",  //预览图片  max_size:200*1024,  ajaxInterace:function(src_data){    var cont_index = src_data.indexOf("base64,")+7;  //base64编码的图片,类型为jpeg    var send_msg = {};    send_msg.content = src_data.substring(cont_index);    $.ajax({              url:'http://.../save_data.php',              type:'POST',              data: send_msg,              success:function(ret){              }    },'json');  }});

后端php代码如下:

<?php    $img = base64_decode($_POST['content']);    file_put_contents("test.jpg", $img);    die(json_encode(['code'=>0,"msg"=>"end"]));?>
0 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 结石堵在输尿管怎么办 尿路结石痛怎么办 怀孕了有肾结石怎么办 怀孕有肾结石怎么办啊 肾结石无疼血尿怎么办 胆囊胆管都结石怎么办 肾里面有肿瘤怎么办 肾癌手术后发烧怎么办 尿结石堵住尿道怎么办 尿结石不能排尿怎么办 肾癌小便有血怎么办 膀胱癌膀胱全切怎么办 怀孕了有阑尾炎怎么办 食物堵塞在食管怎么办 食物卡在食管怎么办 小孩食道卡异物怎么办 八十岁老人得了膀胱癌怎么办 肾结石引起吐血尿血怎么办 肾结石引起的尿血怎么办 食道感觉有异物怎么办 膀胱出血有血块怎么办 肾小球滤过率20怎么办 膀胱癌术后有血尿怎么办 肾病贫血怎么办吃什么 低蛋白血症怎么办 慢性肾炎患者感冒了怎么办 透析病人磷高怎么办 尿毒症透析磷高怎么办 怀孕了有膀胱炎怎么办 宝宝拉肚子尿少怎么办 猫尿血怎么办吃什么药 肝癌小便不出来怎么办 怀孕三个月结石血尿怎么办? 肾小球滤过率65怎么办 肾穿后有血肿6cm怎么办 肾穿刺后血肿怎么办 手术后有血肿怎么办 尿蛋白胆红素高怎么办 哺乳期尿蛋白高怎么办 产后老放屁便秘怎么办 肝癌移植后复发怎么办