js图片压缩上传

最近公司的移动产品相约app要做一次活动,涉及到图片上传,图片又不能太大,不然用户体验太差,必须先压缩再上传,所以用到了html5的canvas和FileReader,代码先上,小弟前端经验不足,代码写得有点乱,有什么不足之处,望大神指点!

<div class="free-upload">
    <p>上传您的约会照片,一张合影、一张票据哦!</p>
    <div class="free-upload-photo">
        <span id="photo_img"></span>
            <input type="file" id="photo" />
        </div>
        <div class="free-upload-bill">
            <span id="bill_img"></span>
        <input type="file" id="bill" />
    </div>
    <p id="photo_loading">正在上传...</p>
</div>

js用到了jquery

var photo = $('#photo');

function isCanvasSupported(){
    var elem = document.createElement('canvas');
    return !!(elem.getContext && elem.getContext('2d'));
}

photo.on('change', function(event){
    if(!canvasSupported){
        return;
  }
      
    compress(event, function(base64Img){
      $.ajax({
      'url' : '/?s=free/upload',
      'type' : 'post',
      'data' : {'base64Img' : base64Img},
      	  'success' : function(ret){
    	             //拿到php传过来的图片地址
        }
     });
   });
});

function compress(event, callback){
    var file = event.currentTarget.files[0];
    var reader = new FileReader();

    reader.onload = function (e) {

        var image = $('<img/>');
        image.on('load', function () {
             var square = 700;
             var canvas = document.createElement('canvas');

             canvas.width = square;
             canvas.height = square;

             var context = canvas.getContext('2d');
             context.clearRect(0, 0, square, square);
             var imageWidth;
             var imageHeight;
             var offsetX = 0;
             var offsetY = 0;

            if (this.width > this.height) {
                  imageWidth = Math.round(square * this.width / this.height);
                  imageHeight = square;
                 offsetX = - Math.round((imageWidth - square) / 2);
           } else {
                 imageHeight = Math.round(square * this.height / this.width);
                 imageWidth = square; 
                 offsetY = - Math.round((imageHeight - square) / 2); 
           }

            context.drawImage(this, offsetX, offsetY, imageWidth, imageHeight);
            var data = canvas.toDataURL('image/jpeg');
            callback(data);
         });

          image.attr('src', e.target.result);
       };
 
     reader.readAsDataURL(file);
}

                         

  

    

转载于:https://www.cnblogs.com/tonyjude/p/4261930.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值