亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

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

2024-08-26 00:20:59
字體:
來源:轉載
供稿:網友

前倆天做了一個圖片轉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      }    })  }

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


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精自产拍久久久久久| 欧美国产精品人人做人人爱| 久久久www成人免费精品| 91精品国产91久久| 色综合亚洲精品激情狠狠| 亚洲一区二区三区乱码aⅴ| 国产一区二区三区在线免费观看| 欧美高清在线观看| 亚洲日本欧美中文幕| 久久夜色精品国产| 久久精品国产视频| 国产欧美日韩中文字幕| 国产亚洲免费的视频看| 国产精品一区二区电影| 午夜精品久久久久久久久久久久| 亚洲性线免费观看视频成熟| 亚洲加勒比久久88色综合| 777午夜精品福利在线观看| 国产成人精品视频在线观看| 亚洲免费伊人电影在线观看av| 日韩暖暖在线视频| 精品亚洲精品福利线在观看| 国产精品久久中文| www.久久久久久.com| 51久久精品夜色国产麻豆| 国产精品日韩精品| 亚洲精品网址在线观看| 亚洲自拍欧美另类| 欧美国产亚洲视频| 国产精品爱啪在线线免费观看| 久久久91精品国产| 国产成人涩涩涩视频在线观看| 国产偷亚洲偷欧美偷精品| 亚洲国产91色在线| 亚洲欧洲视频在线| 欧美日韩爱爱视频| 国产欧美日韩中文字幕在线| 亚洲欧美日韩一区二区在线| 久久男人av资源网站| 日韩欧美中文字幕在线播放| 国产精品久久久一区| 亚洲国产精品电影| 一区二区三区四区视频| 九九热精品在线| 91av免费观看91av精品在线| 97超级碰碰人国产在线观看| 91精品91久久久久久| 久久久久久高潮国产精品视| 国产91精品最新在线播放| 久久久中精品2020中文| 国产裸体写真av一区二区| 欧美日韩ab片| 国产精品一区二区在线| 欧美美最猛性xxxxxx| 欧美视频在线观看免费| 精品国产一区二区三区久久久狼| 福利视频一区二区| 超碰精品一区二区三区乱码| 日韩日本欧美亚洲| 国产精品免费一区豆花| 中文字幕亚洲综合久久筱田步美| 欧美精品亚州精品| 欧美激情免费观看| 国产一区二区三区四区福利| 国产精品视频1区| 日韩精品极品在线观看播放免费视频| 96精品久久久久中文字幕| 欧美日韩中文在线| 一本色道久久88综合日韩精品| 中文在线不卡视频| 亚洲影视九九影院在线观看| 日韩成人高清在线| 国产日产久久高清欧美一区| 欧美激情精品久久久久久变态| 亚洲国产日韩欧美综合久久| 91在线视频成人| 久久免费精品日本久久中文字幕| 一区二区三区四区视频| 日韩精品一区二区三区第95| 欧美洲成人男女午夜视频| 国产午夜精品一区理论片飘花| 亚洲成人三级在线| 亚洲一区二区三区香蕉| 欧美大肥婆大肥bbbbb| 国产一区二区av| 亚洲美女久久久| 久久亚洲成人精品| 九九精品在线观看| 97婷婷涩涩精品一区| 亚洲大尺度美女在线| 97在线看免费观看视频在线观看| 亚洲第一中文字幕在线观看| 成人国产精品久久久久久亚洲| 成人av番号网| 欧美精品videosex极品1| 亚洲高清久久网| 亚洲黄色www网站| 91美女片黄在线观| 在线亚洲欧美视频| 久久久久国产精品一区| 欧美裸体男粗大视频在线观看| 欧美丝袜一区二区三区| 欧美激情欧美激情在线五月| 国产一区二区三区日韩欧美| 日韩视频免费观看| 久久视频国产精品免费视频在线| 亚洲精品电影在线观看| 国产美女久久精品香蕉69| 亚洲男人第一av网站| 日韩欧美亚洲国产一区| 欧美日韩综合视频网址| 亚洲国产精品va在线| 久久男人资源视频| 日韩精品日韩在线观看| 久99九色视频在线观看| 午夜精品福利在线观看| 国产狼人综合免费视频| 伊人伊成久久人综合网站| 国内精品久久久久久| 亚洲电影免费观看高清完整版| 日韩中文字幕不卡视频| 午夜精品一区二区三区在线视| 国产精品美女视频网站| 爽爽爽爽爽爽爽成人免费观看| 91精品啪aⅴ在线观看国产| 欧美日韩国产丝袜另类| 国产成人在线一区| 久久久精品久久久久| 日本亚洲欧洲色α| 97久久精品在线| 国产精品成人va在线观看| 精品一区二区三区三区| 亚洲最大成人免费视频| 亚洲人成网站777色婷婷| 国产97人人超碰caoprom| 国产精品网站大全| 538国产精品一区二区免费视频| 激情成人在线视频| 久久国产精品99国产精| 国产亚洲欧美视频| 久久国产精品久久久久| 久久久影视精品| 欧美综合第一页| 北条麻妃久久精品| 77777亚洲午夜久久多人| 日av在线播放中文不卡| 91精品国产自产在线| 国产在线视频一区| 91免费精品国偷自产在线| 国产精品美女www| 中文字幕在线看视频国产欧美| 少妇高潮久久久久久潘金莲| 一区二区三区无码高清视频| 色综合久久88色综合天天看泰| 亚洲一二三在线| 欧美小视频在线观看| 亚洲国产美女精品久久久久∴| 国产精品视频xxx| 日韩欧美国产高清91| 精品亚洲va在线va天堂资源站| 91高清视频免费| 日韩欧中文字幕| 亚洲欧美国产精品久久久久久久| 91av在线不卡|