uniapp 調用原生 壓縮圖片


choseImg() {
    let that = this;
    that.isCrossImg = true;
    uni.chooseImage({
        count: that.count,
        sizeType: ['compressed', 'original'],
        sourceType: that.sourceType,
        success: function(chooseImageRes) {
            console.log("chooseImageRes", chooseImageRes);
            let tempFilePaths = chooseImageRes.tempFilePaths; //上傳的圖片路徑
            //判斷圖片上傳是否必須要橫圖,若需要則驗證
            if (that.baseData.remote) {
                tempFilePaths.forEach((item, index) => {
                uni.getImageInfo({
                    src: item,
                    success: (res) => {

                        let canvasWidth = res.width; //圖片原始長寬
                        let canvasHeight = res.height;
                        if (canvasWidth <= canvasHeight) {
                            uni.showToast({
                                title: '請使用手機橫拍上傳圖片',
                                duration: 1000,
                                icon: 'none'
                            });
                            that.isCrossImg = false;
                            return;
                        }

                    },
                    complete: () => {
                        if (index == tempFilePaths.length - 1 && that.isCrossImg) {
                             that.appCompressImg(0, tempFilePaths);
                        }
                    }
                })
                })
            } else {
                that.appCompressImg(0, tempFilePaths);
            }

        }
    })
 },

 //app壓縮圖片,由於這個操作是異步,所以需要遞歸,num記錄遞歸的次數是否等於數組長度用於程序的返回
 appCompressImg(num, tempFilePaths) {
     let that = this;
     let index = tempFilePaths[num].lastIndexOf("."); //獲取圖片地址最后一個點的位置
     let img_type = tempFilePaths[num].substring(index + 1, tempFilePaths[num].length); //截取圖片類型如png jpg
     let img_yuanshi = tempFilePaths[num].substring(0, index); //截取圖片原始路徑
     let d2 = new Date().getTime(); //時間戳
     //壓縮圖片
     plus.zip.compressImage({
         src: tempFilePaths[num], //你要壓縮的圖片地址
         dst: img_yuanshi + d2 + '.' + img_type, //壓縮之后的圖片地址(注意壓縮之后的路徑最好和原生路徑的位置一樣,不然真機上報code-5)
         width: '800px',
         height: 'auto'
     },
     function(e) {
         //壓縮之后路徑轉base64位的
         //通過URL參數獲取目錄對象或文件對象
         plus.io.resolveLocalFileSystemURL(e.target, function(entry) {
         // 可通過entry對象操作test.html文件
         entry.file(function(file) { //獲取文件數據對象
              var fileReader = new plus.io.FileReader(); // 文件系統中的讀取文件對象,用於獲取文件的內容

              fileReader.readAsDataURL(file); //以URL編碼格式讀取文件數據內容
              fileReader.onloadend = function(evt) { //讀取文件成功完成的回調函數

              let base64 = evt.target.result; //拿到base64
              that.$api.mainApi.uploadImageBase64({
                   base64Data: base64
              }).then(res => {
                   if (res.data.code == 0) {
                       let url = that.$imgBaseUrl + res.data.data;
                       if (that.count == 1) {
                           that.$set(that.imgUrls, '0', url);
                       } else {
                           that.imgUrls.push(url);
                       }

                       if (num == tempFilePaths.length - 1) {
                           let data = {
                             comName: that.comName,
                              value: {
                                imgSubType: that.baseData.subType,
                                value: that.imgUrls
                             }
                          }
                          that.$emit("sendData", data);
                          return
                       } else {
                           //利用遞歸循環來實現多張圖片壓縮
                           that.appCompressImg(num + 1, tempFilePaths)
                       }
                   } else {
                       uni.showToast({
                           title: '圖片上傳失敗',
                           duration: 2000
                       });
                   }
               })

            }
        })
    })


},
function(error) {
  console.log("Compress error!");
   console.log(JSON.stringify(error));
}
);
},

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM