基于JS实现前端压缩上传图片的实例代码
程序员文章站
2022-10-14 13:54:01
具体代码如下所示:
具体代码如下所示:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>前端压缩上传图片</title> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> </head> <body> <input type="file" id="picfile" onchange="readfile(this)" /> <img id="img" src="" alt="" /> <script> function readfile(obj) { var file = obj.files[0]; //判断类型是不是图片 if (!/image\/\w+/.test(file.type)) { alert("请确保文件为图像类型"); return false; } var reader = new filereader(); reader.readasdataurl(file); reader.onload = function(e) { dealimage(this.result, { quality: 0.5 }, function(base) { //调用 var blob = dataurltoblob(base); var newfile = new file([blob], file.name, { type: file.type }); console.log(newfile) let r = new filereader(); //本地预览 r.onload = function() { $('#img').attr("src", r.result);; } r.readasdataurl(newfile); //base64 // upload(newfile); }); } } //将base64转换为blob function dataurltoblob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new uint8array(n); while (n--) { u8arr[n] = bstr.charcodeat(n); } return new blob([u8arr], { type: mime }); } function upload(file) { var that = this; // 创建form对象 let param = new formdata(); // 通过append向form对象添加数据 param.append('img', file); // 文件大小 param.append('size', file.size); for (var n in that.params) { param.append(n, that.params[n]); } // 创建ajax var xhr = new xmlhttprequest(); xhr.onload = function() { console.log(xhr.responsetext) } xhr.open("post", "yourapi", true); // 发送表单数据 xhr.send(param); } /** * 图片压缩,默认同比例压缩 * @param {object} path * pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照相图片储存的绝对路径 * @param {object} obj * obj 对象 有 width, height, quality(0-1) * @param {object} callback * 回调函数有一个参数,base64的字符串数据 */ function dealimage(path, obj, callback) { var img = new image(); img.src = path; img.onload = function() { var that = this; // 默认按比例压缩 var w = that.width, h = that.height, scale = w / h; w = obj.width || w; h = obj.height || (w / scale); var quality = obj.quality || 0.7; // 默认图片质量为0.7 //生成canvas var canvas = document.createelement('canvas'); var ctx = canvas.getcontext('2d'); // 创建属性节点 var anw = document.createattribute("width"); anw.nodevalue = w; var anh = document.createattribute("height"); anh.nodevalue = h; canvas.setattributenode(anw); canvas.setattributenode(anh); ctx.drawimage(that, 0, 0, w, h); // 图像质量 if (obj.quality && obj.quality <= 1 && obj.quality > 0) { quality = obj.quality; } // quality值越小,所绘制出的图像越模糊 var base64 = canvas.todataurl('image/jpeg', quality); // 回调函数返回base64的值 callback(base64); } } </script> </body> </html>
总结
以上所述是小编给大家介绍的基于js实现前端压缩上传图片的实例代码,希望对大家有所帮助
上一篇: 关键词与搜索尾巴