講乾貨,不囉嗦,當涉及對圖片有質量壓縮要求的時候,可使用Canvas實現圖片壓縮。html
步驟:jquery
1.獲取img元素,既要壓縮的圖片canvas
2.建立canvas對象後端
3.使用canvas的drawImage方法繪製圖片測試
4.經過canvas toDataURl方法獲取圖像base64編碼,設置quality參數,實現壓縮編碼
參考示例:spa
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Canvas圖片壓縮測試</title> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> </head> <body> <div class="container"> <h2>壓縮前圖片</h2> <img id="originalImg" src="test.jpg"> <h2>壓縮後圖片</h2> <img id="compressedImg" src=""> </div> <script> $(document).ready(function(){ compressImg(300,0.2) }); function compressImg(width,quality ) { // 圖片壓縮方法,接受2個參數 // width:壓縮後圖片寬度,高度按比例計算 // quality:壓縮比例參數,範圍0-1 var img=$("#originalImg")[0];//獲取圖像元素 var height=width/img.width*img.height; //生成canvas var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); canvas.width = width; canvas.height = height; //經過canvas drawImage方法繪製圖片 ctx.drawImage(img,0,0,width,height);//後四個爲位置參數,左上角x,y座標,右下角x,y座標 //經過canvas toDataURl方法獲取圖像base64編碼,quality爲壓縮質量參數,值越小圖像越模糊 var base64 = canvas.toDataURL('image/jpeg', quality); //測試展現 $("#compressedImg").attr("src",base64) //獲取到base64後可作進一步處理,如傳到後端並儲存 } </script> <style> #originalImg{ width: 300px; } </style> </body> </html>
壓縮先後圖片對比:3d
生成的base64碼:code
能力有限,水平通常,錯誤之處,歡迎指正,感謝關注和評論!htm