图片压缩旋转,我是用了html5ImgCompress,处理图片压缩、旋转、输出base64
地址:https://github.com/mhbseal/html5ImgCompress
$('#imgUpdown').on('change', function (e) { new html5ImgCompress(e.target.files[0], { before: function (file) { console.log('单张: 压缩前...'); }, done: function (file, base64) { console.log('单张: 压缩成功...'); // insertImg(file); // 显示原图 var fd = new FormData(); fd.append('user_id', user_id); fd.append('file', convertBase64UrlToBlob(base64), file.name); fd.append('filename', file.name); $.ajax({ url: api, method: 'POST', processData: false, // 必须 contentType: false, // 必须 dataType: 'json', data: fd, success(data) { console.log(data); window.location.href = 'result.html?user_id='+data.data.id; } }); }, fail: function (file) { console.log('单张: 压缩失败...'); }, complete: function (file) { console.log('单张: 压缩完成...'); }, notSupport: function (file) { alert('浏览器不支持!'); } }); });
用formData 格式提交
因为base64,给后端占用空间太大,所以要转成blod 的格式
这里需要用到base64转成blod
有现成的方法:
function convertBase64UrlToBlob(urlData){ var bytes=window.atob(urlData.split(',')[1]); //去掉url的头,并转换为byte //处理异常,将ascii码小于0的转换为大于0 var ab = new ArrayBuffer(bytes.length); var ia = new Uint8Array(ab); for (var i = 0; i < bytes.length; i++) { ia[i] = bytes.charCodeAt(i); } return new Blob( [ab] , {type : 'image/png'}); }
****
需要注意的是blod 对象加入formDate,需要第三个参数,文件名称