qrcode.js使用js生成二維碼(并下載)的實踐

github: qrcode.js生成二維碼并下載--BY LucaLJX

Paste_Image.png

知識點

  • base64數(shù)據(jù)形式

Base64是一種用64個字符來表示任意二進制數(shù)據(jù)的方法餐曹。 -- 廖雪峰官方網(wǎng)站

Base64編碼有哪些情景需求盖腕? -- 知乎

案例場景

  • 后臺生成邀請鏈接,前端拿到鏈接之后處理成二維碼圖片并下載到本地,用于轉(zhuǎn)發(fā)。

qrcode.js及jquery-qrcode.js實現(xiàn)生成二維碼

1.html 代碼

  <div id="qrcode"></div>
  <!-- 用于生成二維碼的容器 -->

2.js 代碼

  // qrcode.js
  var qrcode = new QRCode(document.getElementById("qrcode"), {
    text: "i am the first qrcode",
    width: 128, //生成的二維碼的寬度
    height: 128, //生成的二維碼的高度
    colorDark : "#000000", // 生成的二維碼的深色部分
    colorLight : "#ffffff", //生成二維碼的淺色部分
    correctLevel : QRCode.CorrectLevel.H
  });
  //jquery-qrcode.js
  var qrcode = $('#qrcode').qrcode({
    width: 128,
    height: 128,
    text: "size doesn't matter"
  });

3.qrcode.js 與jquery-qrcode.js區(qū)別

  • qrcode.js可以指定生成的二維碼深色、淺色區(qū)域塊的顏色拘领,jquery-qrcode.js只能默認黑白兩色
  • qrcode.js支持clear()和makeCode()方法,用于便捷清空二維碼樱调、更換二維碼约素,jquery-qrcode.js不支持

4.qrcode.js生成二維碼原理

img-1.jpg
  • qrcode.js在用于生成二維碼的容器#qrcode內(nèi)生成一個canvas標簽和一個img標簽,并且以base64的編碼格式描述圖片信息笆凌。

點擊按鈕业汰,生成的二維碼圖片保存到本地

實現(xiàn)原理

  • 將base64編碼格式的圖片轉(zhuǎn)換成canvas畫布
  • 利用toDataUrl()方法將canvas畫布信息轉(zhuǎn)化為可供下載的url信息 toDataUrl()
  • 構(gòu)建下載鏈接并模擬點擊,將圖片下載到本機

基于qrcode.js案例demo實現(xiàn)將生成的二維碼保存為本地圖片

  • 構(gòu)建一個用于下載的空的a標簽
  <a id="downloadLink"></a>
  <button type="button" onclick="downloadClick()">下載</button>
  • 將base64圖片構(gòu)建成畫布并模擬點擊a標簽下載
  //js
  function downloadClick () {
    // 獲取base64的圖片節(jié)點
    var img = document.getElementById('qrcode').getElementsByTagName('img')[0];
    // 構(gòu)建畫布
    var canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    canvas.getContext('2d').drawImage(img, 0, 0);
    // 構(gòu)造url
    url = canvas.toDataURL('image/png');
    // 構(gòu)造a標簽并模擬點擊
    var downloadLink = document.getElementById('downloadLink');
    downloadLink.setAttribute('href', url);
    downloadLink.setAttribute('download', '二維碼.png');
    downloadLink.click();
  }
  //jquery
  function downloadClick () {
    // 獲取base64的圖片節(jié)點
    var img = $('#qrcode img').[0];
    // 構(gòu)建畫布
    var canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    canvas.getContext('2d').drawImage(img, 0, 0);
    // 構(gòu)造url
    url = canvas.toDataURL('image/png');
    // 構(gòu)造a標簽并模擬點擊
    var downloadLink = $('#downloadLink').attr("href", url).attr("download", "二維碼.png");
    downloadLink[0].click();
  }

BY--LucaLJX

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菩颖,一起剝皮案震驚了整個濱河市样漆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晦闰,老刑警劉巖放祟,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呻右,居然都是意外死亡跪妥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門声滥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眉撵,“玉大人侦香,你說我怎么就攤上這事∨ε保” “怎么了罐韩?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長污朽。 經(jīng)常有香客問我散吵,道長,這世上最難降的妖魔是什么蟆肆? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任矾睦,我火速辦了婚禮,結(jié)果婚禮上炎功,老公的妹妹穿的比我還像新娘枚冗。我一直安慰自己,他們只是感情好蛇损,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布赁温。 她就那樣靜靜地躺著,像睡著了一般州藕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酝陈,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天床玻,我揣著相機與錄音,去河邊找鬼沉帮。 笑死锈死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的穆壕。 我是一名探鬼主播待牵,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喇勋!你這毒婦竟也來了缨该?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤川背,失蹤者是張志新(化名)和其女友劉穎贰拿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熄云,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡膨更,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缴允。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荚守。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矗漾,到底是詐尸還是另有隱情锈候,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布缩功,位于F島的核電站晴及,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嫡锌。R本人自食惡果不足惜虑稼,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望势木。 院中可真熱鬧蛛倦,春花似錦、人聲如沸啦桌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甫男。三九已至且改,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間板驳,已是汗流浹背又跛。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留若治,地道東北人慨蓝。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像端幼,于是被迫代替她去往敵國和親礼烈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容