基于JS實(shí)現(xiàn)前端壓縮上傳圖片的實(shí)例代碼
具體代碼如下所示:
<!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("請(qǐng)確保文件為圖像類型"); return false; } var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function(e) { dealImage(this.result, { quality: 0.5 }, function(base) { //調(diào)用 var blob = dataURLtoBlob(base); var newFile = new File([blob], file.name, { type: file.type }); console.log(newFile) let r = new FileReader(); //本地預(yù)覽 r.onload = function() { $('#img').attr("src", r.result);; } r.readAsDataURL(newFile); //Base64 // upload(newFile); }); } } //將base64轉(zhuǎn)換為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; // 創(chuàng)建form對(duì)象 let param = new FormData(); // 通過(guò)append向form對(duì)象添加數(shù)據(jù) param.append('img', file); // 文件大小 param.append('size', file.size); for (var n in that.params) { param.append(n, that.params[n]); } // 創(chuàng)建ajax var xhr = new XMLHttpRequest(); xhr.onload = function() { console.log(xhr.responseText) } xhr.open("POST", "yourapi", true); // 發(fā)送表單數(shù)據(jù) xhr.send(param); } /** * 圖片壓縮,默認(rèn)同比例壓縮 * @param {Object} path * pc端傳入的路徑可以為相對(duì)路徑,但是在移動(dòng)端上必須傳入的路徑是照相圖片儲(chǔ)存的絕對(duì)路徑 * @param {Object} obj * obj 對(duì)象 有 width, height, quality(0-1) * @param {Object} callback * 回調(diào)函數(shù)有一個(gè)參數(shù),base64的字符串?dāng)?shù)據(jù) */ function dealImage(path, obj, callback) { var img = new Image(); img.src = path; img.onload = function() { var that = this; // 默認(rèn)按比例壓縮 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; // 默認(rèn)圖片質(zhì)量為0.7 //生成canvas var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); // 創(chuàng)建屬性節(jié)點(diǎn) 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); // 圖像質(zhì)量 if (obj.quality && obj.quality <= 1 && obj.quality > 0) { quality = obj.quality; } // quality值越小,所繪制出的圖像越模糊 var base64 = canvas.toDataURL('image/jpeg', quality); // 回調(diào)函數(shù)返回base64的值 callback(base64); } } </script> </body> </html>
總結(jié)
以上所述是小編給大家介紹的基于JS實(shí)現(xiàn)前端壓縮上傳圖片的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
js實(shí)現(xiàn)手機(jī)web圖片左右滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)手機(jī)web圖片左右滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格的方法詳解
這篇文章主要為大家介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法(兼容IE與FireFox)
這篇文章主要介紹了JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法,涉及javascript與iframe交互動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下2016-06-06js 靜態(tài)HTML表格排序功能實(shí)現(xiàn)
對(duì)于對(duì)于一些表格按價(jià)格 等進(jìn)行排序,方便用戶對(duì)當(dāng)前頁(yè)面的高低價(jià)格排序,用戶體驗(yàn)性好2009-02-02