vue.根據url生成二維碼

文章目錄

    • 概要
    • QR碼
    • 步驟
      • 1. 引入庫
      • 2. 生成二維碼
      • 3. 將二維碼加入頁面中
    • 用javascript庫簡化二維碼生成
      • 1. 引入庫
      • 2. 使用庫生成二維碼
    • 二維碼美化和定制
      • 1. 調整大小
      • 2. 調整顏色
      • 3. 添加自定義形狀和圖案
      • 4. 添加logo
    • 性能優化與錯誤處理
      • 1. 減少不必要的計算
      • 2. 異步處理

概要

生成 URL 二維碼的基本原理是將 URL 字符串轉換成二維碼的編碼格式,然后通過特定的算法生成二維碼圖像。這個過程通常涉及以下幾個步驟:

  1. 對 URL 進行編碼。
  2. 選擇合適的二維碼版本和糾錯等級。
  3. 生成二維碼矩陣。
  4. 根據矩陣生成圖像。

使用 JavaScript 生成 URL 二維碼,可以在客戶端直接完成,無需服務器端支持,這樣可以減少服務器的負擔,提高用戶體驗。此外,JavaScript 庫提供了簡單易用的 API,使得二維碼的生成變得非常便捷。

QR碼

QR 碼(Quick Response Code)是最流行的二維碼類型之一,由日本 Denso Wave 公司于 1994 年發明。它的設計初衷是為了能夠在短時間內被讀取,并且能夠容納更多的信息。QR 碼可以存儲數字、字母、文字以及二進制數據。

一個二維碼由以下幾個基本部分構成:

  • 靜止區:圍繞二維碼的白色邊框,用于隔離二維碼和背景。
  • 定位圖形:位于二維碼的三個角落,幫助掃描器快速定位二維碼。
  • 數據區:包含編碼信息的部分。
  • 格式信息:包含有關二維碼版本和糾錯等級的信息。

二維碼具有糾錯功能,這意味著即使部分二維碼損壞或被遮擋,掃描器仍然能夠正確讀取信息。糾錯等級分為四個級別,從低到高分別是 L、M、Q 和 H,分別對應約 7%、15%、25% 和 30% 的糾錯能力。

步驟

1. 引入庫

npm install qrcode
import { toCanvas } from 'qrcode';   //按需引入

2. 生成二維碼

const generateQRCode = async (url) => {const canvas = document.createElement('canvas');await toCanvas(canvas, url, {width: 256,margin: 4,errorCorrectionLevel: 'L'});return canvas;
}

3. 將二維碼加入頁面中

const displayQRCode = async (url) => {const canvas = await generateQRCode(url);const container = document.querySelector('.agent-card-' + props.value.id + ' .canvas-container');if (container) {container.innerHTML = '';container.appendChild(canvas);}
}

用javascript庫簡化二維碼生成

目前流行的二維碼生成庫包括 qrcode.js、qrcode-generator 等。這些庫通常提供了豐富的配置選項和良好的兼容性,使得開發者能夠快速集成二維碼生成功能。

1. 引入庫

import QRCode from 'qrcode';

2. 使用庫生成二維碼

<canvas id="qrcode-canvas"></canvas>
//生成二維碼
QRCode.toDataURL(fullUrl, (err, url) => {if (err) {console.error(err);return;}});
//二維碼嵌入網頁
QRCode.toCanvas(document.getElementById('qrcode-canvas'), fullUrl, function (error) {if (error) {console.error(error);return;}visible.value = true;});

二維碼美化和定制

1. 調整大小

// 設置二維碼的尺寸
const qr = qrcode(0, 'L');
qr.size = 300; // 設置為300x300像素
qr.makeCode(url);

2. 調整顏色

// 設置二維碼的前景色和背景色
const qr = qrcode(0, 'L');
qr.size = 300;
qr.foreground = '#0000FF'; // 藍色前景
qr.background = '#FFFFFF'; // 白色背景
qr.makeCode(url);

3. 添加自定義形狀和圖案

// 在二維碼中添加自定義形狀
function addCustomShape(qr) {const size = qr.size;const moduleSize = qr.moduleSize;const ctx = qr._oContext;// 添加自定義形狀的代碼// 例如,在二維碼中心添加一個小的圓形圖案ctx.beginPath();ctx.arc(size / 2, size / 2, moduleSize * 3, 0, 2 * Math.PI);ctx.fillStyle = '#FF0000'; // 紅色ctx.fill();
}// 生成二維碼
const qr = qrcode(0, 'L');
qr.size = 300;
qr.makeCode(url);// 添加自定義形狀
addCustomShape(qr);

4. 添加logo

這通常需要在二維碼的靜態區域添加一個透明的品牌圖像。

// 在二維碼中添加品牌Logo
function addBrandLogo(qr, logoUrl) {const size = qr.size;const logo = new Image();logo.src = logoUrl;logo.onload = function() {const logoSize = size / 5; // 假設Logo大小為二維碼大小的1/5const ctx = qr._oContext;ctx.drawImage(logo, (size - logoSize) / 2, (size - logoSize) / 2, logoSize, logoSize);};
}// 生成二維碼
const qr = qrcode(0, 'L');
qr.size = 300;
qr.makeCode(url);// 添加品牌Logo
addBrandLogo(qr, 'path/to/logo.png');

性能優化與錯誤處理

在實現 URL 二維碼生成的過程中,性能優化和錯誤處理是確保用戶體驗和功能穩定性的關鍵環節。合理的性能優化可以提升生成二維碼的速度,而有效的錯誤處理則能夠保證在出現問題時用戶能夠獲得清晰的反饋。

1. 減少不必要的計算

在生成二維碼之前,可以先對 URL 進行驗證,確保其格式正確,避免無效的生成嘗試。此外,緩存一些可重用的計算結果,如糾錯碼的計算,也可以減少重復的計算工作。

2. 異步處理

// 使用Promise異步生成二維碼
function generateQRCodeAsync(url) {return new Promise((resolve, reject) => {try {const qr = qrcode(0, 'L');qr.size = 300;qr.makeCode(url);resolve(qr);} catch (error) {reject(error);}});
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94322.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF+MVVM入門學習

最近在學WPF的MVVM&#xff0c;有兩種方式實現&#xff0c;一種是自己實現&#xff0c;一種是借助MVVM框架&#xff0c;接下來通過一個醫院自助打印報告機鍵盤輸入界面來演示自己實現、框架CommunityToolkit和Prism的區別。 項目源碼&#xff1a;https://gitee.com/cplmlm/Sel…

[e3nn] docs | 不可約表示(Irreps)

鏈接&#xff1a;https://docs.e3nn.org/en/latest/examples/examples.html docs&#xff1a;e3nn e3nn是一個用于構建歐幾里得(E(3))等變神經網絡的Python庫&#xff0c;這意味著它們能自動保持三維旋轉和反射的對稱性。 該庫使用不可約表示(Irreps)來描述數據變換方式&…

深入淺出 ArrayList:從基礎用法到底層原理的全面解析(中)

四、ArrayList 常用方法實戰 —— 從添加到遍歷的全場景覆蓋ArrayList 提供了數十個方法&#xff0c;但日常開發中常用的只有 10 個左右&#xff0c;我們按 “元素操作”“集合查詢”“遍歷方式” 三類來梳理&#xff0c;每個方法都附帶示例和注意事項。4.1 元素添加&#xff1…

java后端如何實現下載功能

后端需要把要下載的若干文件 按 ZIP 格式編碼成一段二進制字節流&#xff0c;然后以 Content-Type: application/zip Content-Disposition: attachment; filenamexxx.zip 的形式寫進 HTTP 響應體。瀏覽器收到這段“ZIP 格式的字節流”后&#xff0c;就會彈出保存對話框&#xf…

AI生成技術報告:GaussDB與openGauss的HTAP功能全面對比

GaussDB 與 openGauss 的 HTAP 功能比較 前言 GaussDB集中式版本從505.2版本開始引入了HTAP混合負載功能&#xff0c;openGauss也從7.0.0 RC1版本開始引入了HTAP行列融合功能&#xff0c;加強了行存轉列存的使用友好度&#xff0c;但兩者的實現似乎存在不小的差異。 雖然文檔…

小程序開發指南(四)(UI 框架整合)

?講解了微信小程序 UI 框架的使用方法和特點&#xff0c;根據項目需求選擇合適的組件庫。附有相應的組件庫預覽碼&#xff0c;也是將所有的微信小程序原生組件庫整合在一起方便后續開發的使用。如果有不好或者有錯誤的地方請告知&#xff01;希望可以與大家相互的交流學習&…

golang 1.25.0 安裝

wget https://golang.google.cn/dl/go1.25.0.linux-amd64.tar.gz tar -C /usr/local/ -xzf go1.25.0.linux-amd64.tar.gz ln -s /usr/local/go/bin/* /usr/bin/ go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

基于深度學習的人臉表情識別系統:YOLOv5/v6/v7/v8/v10模型實現與UI界面集成

基于YOLOv5/v7/v8的智能人臉表情識別系統:從算法原理到應用實現 表情識別的技術價值與挑戰 人臉表情識別(Facial Expression Recognition, FERYOLOv5/v7/v8等深度學習算法構建高效的表情識別系統,并設計直觀的UI界面集成方案。無論你是深度學習初學者還是有經驗的開發者,…

初步了解多線程

系列文章目錄 目錄 系列文章目錄 前言 一、進程 二、線程 1. 線程解決資源開銷的方式 2. 線程和進程的聯系和區別 三、多線程編程 1. 直觀了解多線程 2. 線程的創建方式 1. 繼承 Thread 重寫 run() 方法 2. 實現 Runable 接口&#xff0c;重寫 run() 方法 3. 繼承 …

安卓Android低功耗藍牙BLE連接異常報錯133

安卓Android低功耗藍牙BLE連接異常報錯133 之前連接一直好好的,不知道為什么今天突然就連接不了藍牙了,報錯133,按照 找網上的說明總是說清除GATT緩存,其實并不是我的問題,最后看到這里https://softs.im/android-ble-%e8%bf%9e%e6%8e%a5%e9%94%99%e8%af%af133/ 有如下說明: 情…

【分治】快排與歸并專題

分治思想 分&#xff08;Divide&#xff09;&#xff1a;將待排序數組不斷拆分為兩個等長&#xff08;或近似等長&#xff09;的子數組&#xff0c;直到子數組長度為 1&#xff08;天然有序&#xff09;。 治&#xff08;Conquer&#xff09;&#xff1a;遞歸排序每個子數組。 …

[Linux]學習筆記系列 -- mm/page_alloc

文章目錄mm/page_alloc.c 伙伴系統內存分配器(Buddy System Memory Allocator) 內核物理內存管理的核心歷史與背景這項技術是為了解決什么特定問題而誕生的&#xff1f;它的發展經歷了哪些重要的里程碑或版本迭代&#xff1f;目前該技術的社區活躍度和主流應用情況如何&#xf…

3秒傳輸大文件:cpolar+Localsend實現跨網絡秒傳

文章目錄前言1. 在Windows上安裝LocalSend2. 安裝Cpolar內網穿透3. 公網訪問LocalSend4. 固定LocalSend公網地址用 cpolar 讓 Localsend 突破距離限制就是這么簡單&#xff01;三步輕松搞定&#xff1a;在手機和電腦上都安裝 Localsend&#xff0c;在其中一臺設備上運行 cpolar…

基于STM32單片機智能RFID刷卡汽車位鎖樁設計

1 系統功能介紹 本系統是一個 基于 STM32 單片機的智能 RFID 刷卡車位鎖樁控制系統&#xff0c;其設計理念來源于現實中智能停車場的車位鎖樁管理。通過 RFID 刷卡認證、LCD1602 顯示、繼電器控制以及按鍵輔助操作&#xff0c;實現對車位的安全管理。該系統不僅模擬了車輛駛入與…

SQL185 試卷完成數同比2020年的增長率及排名變化

描述現有試卷信息表examination_info&#xff08;exam_id試卷ID, tag試卷類別, difficulty試卷難度, duration考試時長, release_time發布時間&#xff09;&#xff1a;試卷作答記錄表exam_record&#xff08;uid用戶ID, exam_id試卷ID, start_time開始作答時間, submit_time交…

網絡編程中的TCP——TCP的連接的建立、關閉、狀態轉移

網絡編程中的TCP——TCP的連接的建立、關閉、狀態轉移 TCP連接的建立和關閉wireshark捕獲數據&#xff1a;TCP三次握手四次揮手的時序圖&#xff1a;三次握手&#xff1a; 報文段1包含SYN標志&#xff0c;這是一個同步報文段&#xff0c;表示發起連接請求&#xff0c;包含自己起…

SQL 語句拼接在 C 語言中的實現與安全性分析

代碼解析 // 構建SQL插入語句 char *sql_insert (char *)malloc(sizeof(char) * 200); // 分配200字節內存 strcpy(sql_insert, "INSERT INTO user(username, passwd) VALUES("); // 復制基礎SQL語句 strcat(sql_insert, ""); // 添加單引號 strcat(sq…

`lock()` 和 `unlock()` 線程同步函數

1) 函數的概念與用途 lock() 和 unlock() 不是特定的標準庫函數&#xff0c;而是線程同步原語的一般概念&#xff0c;用于在多線程環境中保護共享資源。在不同的編程環境和庫中&#xff0c;這些函數有不同的具體實現&#xff08;如 POSIX 線程的 pthread_mutex_lock() 或 C 的 …

升級openssh后ORACLE RAC EM 安裝失敗處理

升級過程中由于SCP傳輸時目標目錄/tmp/tempRACTrans_2025_08_22--18-25-44-032/ractrans 不存在導致的OC4J配置失敗&#xff1a;WARNING: /usr/bin/scp: dest open "/tmp/tempRACTrans_2025_08_22--18-25-44-032/ractrans": No such file or directory/usr/bin/scp…

ADB 調試工具的學習[特殊字符]

一、ADB 的工作原理 1.1 ADB 概念 ADB (Android Debug Bridge)&#xff1a;Android 調試橋&#xff0c;是開發/測試 Android 應用必備的調試工具。作用&#xff1a;通過 電腦終端命令 操作 安卓手機/模擬器。 1.2 ADB 構成與原理 ADB 由三部分組成&#xff1a; Client 端&#…