前端本地客戶端壓縮圖片,相容IOS,Android,PC、自動按需載入檔案
阿新 • • 發佈:2019-01-10
演示一下
自己試試
說明
在客戶端壓縮好要上傳的圖片可以節省頻寬更快的傳送給後端,特別適合在移動裝置上使用。
為什麼需要
-
已踩過很多坑,經過幾個版本迭代,以及很多很多網友的反饋幫助、機型測試
- 圖片扭曲、某些裝置不自動旋轉圖片方向,沒有jpeg壓縮演算法..
- 不支援new Blob,formData構造的檔案size為0..
- 還有某些機型和瀏覽器(例如QQX5瀏覽器)莫名其妙的BUG..
-
按需載入(會根據對應裝置自動非同步載入JS檔案,節省不必要頻寬)
-
原生JS編寫,不依賴例如
jquery
等第三方庫,支援AMD or CMD規範。
儘管如此,在某些
Android
下依然有莫名其妙的問題,在您使用前,請一定大致瀏覽下issues
如何獲取
通過以下方式都可以下載:
- 執行
npm i lrz
(推薦) - 執行
bower install lrz
接著在頁面中引入
<script src="./dist/lrz.bundle.js"></script>
如何使用
方式1:
如果您的圖片來自使用者拍攝或者上傳的,您需要一個input file
來獲取圖片。
<input id="file" type="file" accept="image/*" />
接著通過change事件可以得到使用者選擇的圖片
document.querySelector('#file').addEventListener('change', function () { lrz(this.files[0]) .then(function (rst) { // 處理成功會執行 console.log(rst); }) .catch(function (err) { // 處理失敗會執行 }) .always(function () { // 不管是成功失敗,都會執行 }); });
方式2:
如果您的圖片不是來自使用者上傳的,那麼也可以直接傳入圖片路徑。
lrz('./xxx/xx/x.png') .then(function (rst) { // 處理成功會執行 }) .catch(function (err){ // 處理失敗會執行 }) .always(function () { // 不管是成功失敗,都會執行 });
後端處理
API
相容性
IE10以上及大部分非IE瀏覽器(chrome、微信什麼的)