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); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。