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

首頁 > 編程 > HTML > 正文

canvas壓縮圖片以及卡片制作的方法示例

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

在做一些活動頁的時候,經常會有一些需要上傳圖片的需求,并且還需要將圖片以及生成的文字以及貼圖生成一張卡可以供用戶可以長按保存。這個需求之前完成過一次,最近又遇上了,使用的都是canvas來實現的。干脆整理出一篇博客出來。如果有更好的實現方法,歡迎提出一起探討。

使用canvas壓縮圖片

在html中使用寫入input標簽,type為file時候,可以調出手機的相冊可供選擇照片,也可以支持攝像頭進行拍照功能。在這個場景下,就可能出現圖片的體積會更大,可能會超出后端所支持的最大范圍,從而導致上傳失敗。

<input id="file" type="file">

1.首先要先獲取到圖片文件

var eleFile = document.querySelector('#file');  var reader = new FileReader()  eleFile.addEventListener('change', function (event) {    file = event.target.files[0];    console.log(file)    // 選擇的文件是圖片    if (file.type.indexOf("image") == 0) {      reader.readAsDataURL(file);        }  });

2.這個時候就取到了圖片文件,就不得不了解一下js中FileReader對象的使用了

FileReader對象允許Web應用程序異步讀取存儲在用戶計算機上的文件(或原始數據緩沖區)的內容

方法:

 

方法名 參數 描述
abort none 中斷讀取
readAsBinaryString file 二進制碼
readAsDataURL file 將文件讀取為 DataURL
readAsText file, [encoding] 將文件讀取為文本

 

  • readAsText:該方法有兩個參數,其中第二個參數是文本的編碼方式,默認值為 UTF-8。這個方法非常容易理解,將文件以文本方式讀取,讀取的結果即是這個文本文件中的內容。
  • readAsBinaryString:該方法將文件讀取為二進制字符串,通常我們將它傳送到后端,后端可以通過這段字符串存儲文件。
  • readAsDataURL:這是例子程序中用到的方法,該方法將文件讀取為一段以 data: 開頭的字符串,這段字符串的實質就是 Data URL,Data URL是一種將小文件直接嵌入文檔的方案。這里的小文件通常是指圖像與 html 等格式的文件。(其中base64的方式就是由此來獲得的。。)

FileReader處理事件簡介

 

事件 描述
onabort 中斷時觸發
onerror onabort
onload 文件讀取成功完成時觸發
onloadend 讀取完成觸發,無論成功或失敗
onloadstart 讀取開始時觸發
onprogress 讀取中

 

繼續上面的操作,在拿到圖片之后,需要將文件進行處理轉化,此時

var reader = new FileReader(); //將文件以Data URL形式讀入頁面   reader.readAsDataURL(file);   reader.onload=function(e) {     console.log(reader)  } 

現在取到了圖片也進行了轉化,現在可以進行壓縮了。

var eleFile = document.querySelector('#file');  var reader = new FileReader()  eleFile.addEventListener('change', function (event) {    file = event.target.files[0];    // console.log(file)    // 選擇的文件是圖片    if (file.type.indexOf("image") == 0) {      var reader = new FileReader();       //將文件以Data URL形式讀入頁面         reader.readAsDataURL(file);         reader.onload=function(e) {           // console.log(this.result)          var pre=document.getElementById("pre");           pre.setAttribute("src", this.result)          canvasDataURL(this.result, 100, 0.5)        }         }  })  /* [canvasDataURL    通過canvas進行壓縮]   * @params path  圖片的base64的格式   * @params targetWidth  壓縮后圖片的寬度     * @params quality 圖片質量  quality值越小,所繪制出的圖像越模糊   */  function canvasDataURL(path, targetWidth, quality) {    var img = new Image();    img.src = path    img.onload = function () {        // var that = this        // console.log(that)        // 默認按比例壓縮        var w = this.width        var h = this.height        scale = w / h;        w = targetWidth        h = targetWidth / scale        var quality = quality;  // 默認圖片質量為0.7        //生成canvas        var canvas = document.createElement('canvas');        var ctx = canvas.getContext('2d');        // 創建屬性節點        var anw = document.createAttribute("width");        anw.nodeValue = w;        var anh = document.createAttribute("height");        anh.nodeValue = h;        canvas.setAttributeNode(anw);        canvas.setAttributeNode(anh);        ctx.drawImage(this, 0, 0, w, h);        // quality值越小,所繪制出的圖像越模糊        var base64 = canvas.toDataURL('image/jpeg', quality);        var result=document.getElementById("result");         result.setAttribute("src", base64)    }  }

很簡單,這樣就可以得到壓縮后的圖片了,從以上的代碼可得知,原理在于canvas中的toDataURL方法可指定圖片壓縮后的格式及壓縮質量,把canvas信息壓縮并轉為base64編碼來實現壓縮。

使用canvas制作卡片

場景:把剛剛壓縮之后的圖片與另一張圖片相結合,可長按進行保存。

function drawCanvas (target) {    var canvas = document.querySelector('#myCanvas')    var ctx = canvas.getContext('2d')    // 是設備上物理像素和設備獨立像素(device-independent pixels (dips))的比例    var dp = window.devicePixelRatio || 1    var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1    var ratio = this.dp / this.backingStoreRatio    var oldWidth = canvas.width    var oldHeight = canvas.height    canvas.width = oldWidth * ratio    canvas.height = oldHeight * ratio    canvas.style.width = oldWidth + 'px'    canvas.style.height = oldHeight + 'px'    ctx.scale(ratio, ratio)    var headerImg = new Image()    var bgImg = new Image()    headerImg.src = target    bgImg.src = '../bg.png'    headerImg.onload = (e) => {      // 圖片的寬高比      var rate = headerImg.width / headerImg.height      console.log(rate)      bgImg.onload = (e) => {        ctx.drawImage(headerImg, 10, 30, 50, (50 / rate))        // 背景圖片        ctx.drawImage(bgImg, 0, 0, 150, 150)        ctx.fillText('厲害啊', 80, 70)        var resultImg = new Image()        resultImg.src = canvas.toDataURL('image/png', 1)        resultImg.style.width = '100%'        var cardImg=document.getElementById("cardImg");         cardImg.setAttribute("src", resultImg.src)      }    }

取到剛剛得到的圖片,在圖像裝載完畢時后將其畫到畫布上,也可以配上文字等等,最后也是把canvas的信息轉為base64編碼來進行實現 ??梢酝ㄟ^代碼來進行實例的實踐

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


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色婷婷av一区二区三区在线观看| 色妞在线综合亚洲欧美| 日韩有码视频在线| 欧美激情综合色| 97在线看免费观看视频在线观看| 亚洲欧美中文在线视频| 精品久久久国产精品999| 日日摸夜夜添一区| 4438全国成人免费| 久久成人精品一区二区三区| 91久久在线观看| 亚洲第一中文字幕在线观看| 亚洲精品乱码久久久久久金桔影视| 欧美日韩亚洲国产一区| 国产在线精品播放| 成人信息集中地欧美| 动漫精品一区二区| 日本一区二区在线播放| 国产欧美一区二区三区视频| 亚洲成人网在线| 久久激情五月丁香伊人| 精品视频在线观看日韩| 成人免费观看a| 精品福利樱桃av导航| 亚洲japanese制服美女| 欧美亚洲国产日本| 日韩在线观看免费高清完整版| 久久av.com| 欧美限制级电影在线观看| 久久97久久97精品免视看| 国产高清视频一区三区| 久久夜色精品亚洲噜噜国产mv| 国产精品99久久久久久www| 亚洲电影免费在线观看| 国产精品成人观看视频国产奇米| 欧美精品激情blacked18| 中文字幕亚洲自拍| 久久久久久久久中文字幕| 欧美激情视频在线免费观看 欧美视频免费一| 91丨九色丨国产在线| 亚洲视频国产视频| 亚洲精品www久久久久久广东| 亚洲人成在线免费观看| 亚洲美女免费精品视频在线观看| 国产狼人综合免费视频| 亚洲免费人成在线视频观看| 久久久久久成人精品| 日韩成人在线网站| 91精品久久久久久久久青青| 国产91精品黑色丝袜高跟鞋| 欧美色视频日本高清在线观看| 5278欧美一区二区三区| 亚洲一区二区三区在线视频| 亚洲精品国产精品国产自| 成人性教育视频在线观看| 中文字幕久热精品视频在线| 精品久久久在线观看| 国产精品精品久久久久久| 亚洲人成自拍网站| 亚洲精品乱码久久久久久金桔影视| 国模精品视频一区二区三区| 国产男人精品视频| 国产精品综合网站| 成人午夜小视频| 欧美精品免费在线观看| 在线观看日韩www视频免费| 日韩精品免费在线视频| 国产精品视频永久免费播放| 欧美精品亚州精品| 日韩高清免费观看| 国产精品扒开腿做爽爽爽的视频| 97人洗澡人人免费公开视频碰碰碰| 中文国产成人精品久久一| 久久国产精品久久久| 日韩av一区二区在线观看| 亚洲欧美日韩图片| 日韩精品在线私人| 91色在线观看| 国产精品丝袜久久久久久高清| 成人免费在线视频网址| 欧美老妇交乱视频| 欧美性猛交xxxx免费看漫画| 欧美激情喷水视频| 91久久久国产精品| 高清日韩电视剧大全免费播放在线观看| 亚洲人成电影网站| 久久精品成人一区二区三区| 久久久亚洲影院你懂的| 欧美日韩国产一区中文午夜| 欧美激情a在线| 国产成人精品日本亚洲| 国产69精品99久久久久久宅男| 久久综合伊人77777尤物| 在线成人一区二区| 狠狠色狠狠色综合日日小说| 久久影视电视剧免费网站清宫辞电视| 97视频免费在线看| 亚洲精品视频网上网址在线观看| 亚洲成人激情小说| 亚洲自拍另类欧美丝袜| 韩国国内大量揄拍精品视频| 亚洲大胆人体av| 欧美大片免费观看在线观看网站推荐| 综合网日日天干夜夜久久| 国产精品精品视频一区二区三区| 成人黄色网免费| 成人午夜一级二级三级| 国产亚洲精品久久久久久| 伊人男人综合视频网| 国内精品国产三级国产在线专| 伊人亚洲福利一区二区三区| 亚洲电影免费观看高清完整版在线| 国产成人自拍视频在线观看| 永久免费看mv网站入口亚洲| 国产精品视频在线观看| 国产精品久久久久久久7电影| 亚洲最新av网址| 日韩中文字幕网址| 在线观看亚洲视频| 亚洲国产精品久久久久秋霞不卡| 亚洲精品日韩久久久| 久久人人爽人人爽人人片av高清| 成人福利在线观看| 日韩成人性视频| 国产一区二区动漫| 久久精品国产亚洲一区二区| 成人午夜在线观看| 久久久91精品国产一区不卡| 久久久久国产精品免费网站| 亚洲美女精品成人在线视频| 日韩免费视频在线观看| 国产精品极品尤物在线观看| 久久精品青青大伊人av| 精品视频偷偷看在线观看| 日韩精品在线免费观看视频| 精品国产乱码久久久久久天美| 国产精品久久电影观看| 亚洲天堂av综合网| 欧美一区三区三区高中清蜜桃| 久久精品国产一区| 欧美一级淫片播放口| 久久精品国产亚洲精品2020| 国内外成人免费激情在线视频网站| 久久久噜噜噜久久久| 欧美一级黑人aaaaaaa做受| 国产69精品99久久久久久宅男| 亚洲午夜小视频| 国产精品精品视频| 国产精品久久久久久久午夜| 国产91网红主播在线观看| 久久av中文字幕| 国产一区二区三区视频| 亚洲一区国产精品| 亚洲美女精品久久| 国产女同一区二区| 国产精品一区二区久久国产| 91av在线免费观看视频| 欧美性猛交xxxx乱大交| 一本大道香蕉久在线播放29| 国产日韩视频在线观看| 成人激情春色网| 国产一区二区三区四区福利| 国产精品com| 九九精品在线视频|