好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > html5使用canvas壓縮圖片的示例代碼

html5使用canvas壓縮圖片的示例代碼

熱門標簽:ok電銷機器人 智能電銷機器人被禁用了么 惡搞電話機器人 欣鼎電銷機器人 效果 地圖標注軟件打印出來 電話機器人技術 如何查看地圖標注 黃石ai電銷機器人呼叫中心 高德地圖標注商戶怎么標

前倆天做了一個圖片轉base64上傳的功能,發現如果圖片的base64過大的話,請求會變的很慢,嚴重的直接超時了,所以想到了在上傳前壓縮一下圖片,然后再上傳到后臺,這樣可以大大的提高效率,在這里記錄一下利用 canvas 壓縮圖片遇到的幾個坑。完整代碼會在文末給出。

第一個坑,在壓縮圖片的時候沒獲取圖片本身的寬高,給了一個 600*480 的定寬定高,因為是手機端的,在上傳圖片的時候都是幾兆的圖片,所以這塊沒任何問題。出問題的地方在 修改頭像的時候,測試的時候上傳的圖片都是小圖片,然后就出現了 壓縮后的圖片顯示不完全,大部分都是空白的現象,這就是因為在壓縮的時候沒有考慮圖片原本的寬高的情況。

第二個坑,解決第一個坑的辦法就是在圖片加載完成后(onload),獲取圖片本身的寬高,然后賦值給 canvas ,這樣進行操作,但是這有個坑就是,圖片加載是異步的,在你 return 的時候,返回的可能是 undefined 而不是你需要的 壓縮后的 base64。這里的解決方法是,新建一個 Promise ,然后把結果 resolve() 返回去,在調用的時候 .then() 得到結果。

知識點:

  • canvas 的 toDataURL('image/png', 0.9) ; 把 canvas 畫的圖片轉換為 base64,第一個參數表示的是圖片的類型,第二個參數表示的是圖片的清晰度。
  • 規定一個最大尺寸,如果圖片本身的寬高大于這個尺寸,按照最大的一個邊進行縮放,另一個根據圖片的 比例 進行設置,然后設置給 canvas .

miniImage.js

export default async function miniSize(imgData, maxSize = 200*1024){
    // const maxSize = 200 * 1024;

    if(imgData && imgData.files && imgData.files.size < maxSize) {
        return imgData.url;
    }else{
      console.log('----------------壓縮圖片-------------------');
      const canvas = document.createElement('canvas');
      let img = new Image();
      img.src = imgData.url;
      let ctx = canvas.getContext('2d');
      return new Promise((resolve =>{
        img.addEventListener('load', function(){
          //圖片原始尺寸
          let originWidth = this.width;
          let originHeight = this.height;
          // 最大尺寸限制
          let maxWidth = 400, maxHeight = 400;
          // 目標尺寸
          let targetWidth = originWidth, targetHeight = originHeight;
          // 圖片尺寸超過400x400的限制
          if (originWidth > maxWidth || originHeight > maxHeight) {
            if (originWidth / originHeight > maxWidth / maxHeight) {
              // 更寬,按照寬度限定尺寸
              targetWidth = maxWidth;
              targetHeight = Math.round(maxWidth * (originHeight / originWidth));
            } else {
              targetHeight = maxHeight;
              targetWidth = Math.round(maxHeight * (originWidth / originHeight));
            }
          }
          canvas.width = targetWidth;
          canvas.height = targetHeight;
          ctx.drawImage(img, 0, 0, targetWidth, targetHeight);
          let base64 = canvas.toDataURL('image/png', 0.9);
          resolve(base64);
        }, false);
      }))
    }
}

調用:

test.js

onChangeImg = async (files, type, index) => {
    let previous = this.props.imagePicker.files;
    if(type === "add") {
      let result = miniSize(files[files.length-1]);
      //使用 .then() 調用獲得結果
      await result.then(res => {
         previous.push({url: res});
      });
    }else if(type === "remove") {
        previous.splice(index,1);
    }
    await this.props.dispatch({
      type: 'imagePicker/saveImage',
      payload: {
        files: previous
      }
    })
  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:綏化 阿壩 盤錦 萍鄉 赤峰 聊城 中山 金昌

巨人網絡通訊聲明:本文標題《html5使用canvas壓縮圖片的示例代碼》,本文關鍵詞  html5,使用,canvas,壓縮,圖片,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《html5使用canvas壓縮圖片的示例代碼》相關的同類信息!
  • 本頁收集關于html5使用canvas壓縮圖片的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 男女做性免费视频软件| 黑人大战欧美极品尤物| 欧美女人交配视频| 免费乱理伦片在线直播| 亚洲欧洲日韩综合| 国精产品一区一区三区有限是什么| 高h情趣道具play文| 五月综合色婷婷| 欧美+国产+日产+韩国| NP百合)《啪遍全校女生(扶她)| 91丨九色丨白浆秘?小青龙 | 国产激情一级毛片久久| 91亚洲狠狠婷婷综合久久久| 日韩色欲黑人AV精品-区二区| 日韩性大片| 美女大胸无遮挡| 开荤粗肉 v文 作者| 私拍大尺度| 亚洲欧美日韩中文不卡| 国产一区日韩二区欧美三| 高靈敏度全極霍爾| 3d婬乱爆乳小乳老师| 国产第一浮力影院新路线| 女教师波多野结衣高清在线| 久久99婷婷精品亚洲蜜臀粉嫩 | 韩国一级婬片A片AAA小说软件| 九色在线无码精品秘?入口蝌蚪| 调教室.com| 欧美巨大video粗暴| 在线观看91精品国产不卡免费| 91精品人妻一区二区三区蜜桃臀| 91情侣偷在线精品国产| 又粗又硬又猛又黄的免费视频黑人| 欧美大尺度男同无删减电影| 一个人看日本动漫高清免费| 男女做爰猛烈动| 欧美大片一区二区| 717影院理论午夜伦不卡,| 一级特黄| 国内自拍视频在线看免费观看| 美女免费高清在线直播|