C#二維碼:利用 ThoughtWorks.QRCode 庫實現二維碼生成與解析

C#二維碼:利用 ThoughtWorks.QRCode 庫實現二維碼生成與解析

在當今數字化信息交互頻繁的時代,二維碼憑借其信息容量大、容錯能力強、易識別等特點,廣泛應用于各個領域。從移動支付、產品溯源到活動簽到,二維碼無處不在。在 C# 開發過程中,通過引入ThoughtWorks.QRCode庫,能夠輕松實現二維碼的生成與解析功能。接下來,我們將深入剖析一段基于該庫的 C# 代碼,詳細了解其實現原理與使用方式。

一、代碼結構與核心類解析

上述代碼主要由幾個關鍵部分構成:用于描述二維碼圖標信息的QrCodeIcon類、整合二維碼生成配置選項的QrCodeOptions類、定義二維碼糾錯級別的QrCodeLevel枚舉,以及提供二維碼生成與解析核心方法的QrCode靜態類。

QrCodeIcon

public class QrCodeIcon
{public string? Path { get; set; }public int Size { get; set; }public int Border { get; set; }
}

QrCodeIcon類用于封裝二維碼中間嵌入圖標的相關信息。其中,Path屬性用于指定圖標的文件路徑,方便開發者將自定義圖標融入二維碼;Size屬性可以精確控制圖標的大小,確保其在二維碼中顯示比例協調;Border屬性則用于設置圖標邊框寬度,增加圖標與二維碼的視覺區分度 ,使生成的二維碼更具個性化。

QrCodeOptions

public class QrCodeOptions
{public int Version { get; set; }public int Scale { get; set; }public QrCodeIcon? Icon { get; set; }public bool Edge { get; set; }public QrCodeLevel Level { get; set; }
}

QrCodeOptions類如同二維碼生成的 “配置中心”,將各種關鍵配置選項集中管理。Version屬性用于設定二維碼的版本號,不同版本對應不同的尺寸和信息容量;Scale屬性控制二維碼的縮放比例,可根據實際需求調整二維碼大小;Icon屬性關聯QrCodeIcon類,實現二維碼圖標嵌入功能;Edge屬性決定是否顯示二維碼邊緣,為外觀設計提供更多選擇;Level屬性則通過QrCodeLevel枚舉,設置二維碼的糾錯級別。

QrCodeLevel枚舉

public enum QrCodeLevel
{L,M,Q,H
}

QrCodeLevel枚舉定義了四種不同級別的二維碼糾錯能力。L級別表示可修正 7% 的字碼錯誤,適用于對信息準確性要求不高、二維碼不易受損的場景;M級別可修正 15% 的字碼錯誤,是較為常用的默認選項;Q級別能修正 25% 的字碼錯誤;H級別糾錯能力最強,可修正 30% 的字碼錯誤,適用于二維碼可能面臨磨損、遮擋等復雜環境的情況。開發者可根據實際應用場景,靈活選擇合適的糾錯級別,保障二維碼的可靠識別。

QrCode靜態類

QrCode靜態類是實現二維碼生成與解析功能的核心載體,其中的EncodeDecode方法是整個代碼的關鍵邏輯所在。

Encode方法
public static Bitmap Encode(string message, QrCodeOptions? options = null)
{var defaultScale = 4;if (options != null){defaultScale = options.Scale;}var defaultLevel = QRCodeEncoder.ERROR_CORRECTION.M;if (options != null){defaultLevel = (QRCodeEncoder.ERROR_CORRECTION)options.Level;}var defaultVersion = 0;if (options != null){defaultVersion = options.Version;}var encoder = new QRCodeEncoder{QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,QRCodeScale = defaultScale,QRCodeVersion = defaultVersion,QRCodeErrorCorrect = defaultLevel,QRCodeBackgroundColor = Color.White,QRCodeForegroundColor = Color.Black};return encoder.Encode(message, Encoding.UTF8);
}

Encode方法承擔著將文本信息轉化為二維碼圖片的重任。它接收兩個參數,message為需要編碼到二維碼中的字符串信息,options為可選的二維碼生成配置參數。方法內部首先設定默認的縮放比例、糾錯級別和版本號,若傳入了options,則使用其中的配置覆蓋默認值。隨后,創建QRCodeEncoder實例,對其編碼模式、縮放比例、版本號、糾錯級別以及二維碼的背景色和前景色進行配置。最后,調用Encode方法將message編碼為Bitmap格式的二維碼圖片并返回。

Decode
public static string Decode(Bitmap img)
{var decoder = new QRCodeDecoder();return decoder.decode(new QRCodeBitmapImage(img));
}

Decode方法的作用是將二維碼圖片中的信息提取出來。它接收一個Bitmap類型的參數img,即待解析的二維碼圖片。方法中創建QRCodeDecoder實例,將Bitmap對象轉換為QRCodeBitmapImage對象后,調用decode方法解析二維碼,最終返回解析得到的字符串信息。

二、實際應用示例

生成個性化二維碼

class Program
{static void Main(){var message = "https://www.example.com";var icon = new QrCodeIcon{Path = "logo.png",Size = 50,Border = 2};var options = new QrCodeOptions{Scale = 6,Level = QrCodeLevel.Q,Version = 3,Icon = icon,Edge = true};var qrCode = QrCode.Encode(message, options);qrCode.Save("custom_qr_code.png", System.Drawing.Imaging.ImageFormat.Png);}}

在上述示例中,我們想要生成一個包含網站鏈接的二維碼,并在其中嵌入自定義圖標。首先定義要編碼的鏈接message,創建QrCodeIcon實例配置圖標信息,再通過QrCodeOptions實例設置二維碼的縮放比例、糾錯級別、版本號、圖標以及邊緣顯示等參數。最后調用QrCode.Encode方法生成二維碼,并將其保存為png格式的圖片。

解析二維碼

class Program
{static void Main(){var img = new Bitmap("custom_qr_code.png");var result = QrCode.Decode(img);Console.WriteLine(result);}
}

該示例展示了解析二維碼的過程。我們加載之前生成的二維碼圖片,將其作為參數傳入QrCode.Decode方法,解析出二維碼中的信息并輸出到控制臺。

三、總結與拓展

通過對這段 C# 代碼的詳細解讀,我們掌握了使用ThoughtWorks.QRCode庫實現二維碼生成與解析的方法。無論是在 Web 應用、桌面程序還是移動開發中,這套代碼都能為我們快速集成二維碼功能提供有力支持。在實際項目應用中,開發者還可以進一步拓展代碼功能,比如添加對二維碼顏色漸變效果的支持,優化圖標與二維碼的融合算法,或者結合數據庫實現動態二維碼生成等。如果在使用過程中有任何疑問或獨特的應用場景,歡迎在評論區交流分享,共同探索二維碼技術在 C# 開發中的更多可能!

以上博客詳細闡述了代碼的功能與使用。若你希望增加代碼優化建議、補充更多應用場景示例,隨時和我說。

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

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

相關文章

【Java Web】速通JavaScript

參考筆記:JavaWeb 速通JavaScript_javascript 速通-CSDN博客 目錄 一、JavaScript快速入門 1. 基本介紹 2. JavaScript特點 3. JavaScript的引入方式(重要) 3.1 寫在script標簽中 ?????3.2 以外部文件方式引入 二、JS的數據類型 1. 變量 2. 常用數據類型 3.特殊值 三、…

Python打卡訓練營-Day13-不平衡數據的處理

浙大疏錦行 知識點: 不平衡數據集的處理策略:過采樣、修改權重、修改閾值交叉驗證代碼 過采樣 過采樣一般包含2種做法:隨機采樣和SMOTE 過采樣是把少的類別補充和多的類別一樣多,欠采樣是把多的類別減少和少的類別一樣 一般都是缺…

Mac OS 使用說明

Mac 的啟動組合鍵 了解可通過在啟動時按住一個或多個按鍵來訪問的 Mac 功能和工具。 若要使用這些組合鍵中的任何一個,請在按下電源按鈕以開啟 Mac 后或在 Mac 開始重新啟動后,立即按住相應按鍵。請一直按住,直至電腦出現對應的行為。 !!!上…

LoadRunner 是什么

LoadRunner 是一款由 Micro Focus(原惠普企業軟件部門)開發的性能測試工具,廣泛應用于軟件、應用程序和系統的 負載測試、壓力測試 和 性能分析。它通過模擬大量用戶并發操作,幫助測試人員評估系統在高負載下的性能、穩定性和可擴…

RISC-V PMA、PMP機制深入分析

1 PMA PMA(Physical Memory Attributes),物理內存屬性,顧名思義就是用來設置物理內存屬性的,但這里說“設置”,并不合理,因為一般情況下各存儲的屬性,在芯片設計時就固定了&#xf…

SQL正則表達式總結

這里寫目錄標題 一、元字符二、正則表達函數1、 regexp_like(x,pattern[,match_option])2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]]) 3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]]) 4、 REGEXP_REPLACE(x,patter…

Shortest path 代碼

Project https://graphics.cs.utah.edu/research/projects/shortest-path-to-boundary/ Build and Debug Fork:(在Win10上) https://github.com/chunleili/Shortest-Path-to-Boundary-for-Self-Intersecting-Meshes commit hash d3160168d2b6a58188d12e6cd959da…

AMBA總線家族成員

在AMBA總線協議體系中,AXI4雖然是最新且性能最強的總線協議,但AHB和APB仍然被廣泛使用,主要原因在于??場景適配性、資源優化和系統兼容性??的綜合考量。以下是具體分析: AMBA 1?:僅包含ASB和APB1。?AMBA 2?&am…

前端高頻面試題1:HTML/CSS/瀏覽器/計算機網絡

目錄 1.為什么會出現margin塌陷? 2.如何解決margin塌陷? 3.HTML5有哪些新特性? 4.常見的語義化標簽有哪些?語義化標簽的好處? 5.使用css和js做動畫有何優劣 6.如何實現文本超出展示省略號 7.deep在css中存在嗎&…

基于 Spring Boot + Vue 的墻繪產品展示交易平臺設計與實現【含源碼+文檔】

項目簡介 本系統是一個基于 Spring Boot Vue 技術棧開發的墻繪產品展示交易平臺,旨在提供一個高效、便捷的在線商城平臺,方便用戶瀏覽、選購墻繪產品,并提供管理員進行商品管理、訂單管理等功能。系統采用了前后端分離的架構,前…

STM32F103_Bootloader程序開發05 - Keil修改生成文件的路徑與文件名,自動生成bin格式文件

導言 通過Keil的相關配置,可以靈活地修改輸出文件的保存路徑及文件名稱。在Bootloader程序開發過程中,合理配置輸出文件對于后續固件升級和自動化腳本處理至關重要。完成路徑和文件名配置后,還可以借助Keil自帶的fromelf.exe工具,…

力扣每日一題2025.5.28——題號:3372.連接兩棵樹后最大目標節點數目 |

目錄 題目鏈接:3372. 連接兩棵樹后最大目標節點數目 I - 力扣(LeetCode) 題目描述 解法一: Java寫法: C寫法: 運行時間 時間復雜度和空間復雜度 總結 題目鏈接:3372. 連接兩棵樹后最大目…

華為防火墻NAPT配置

1.實驗拓撲 2.實驗配置 [SW1]dis cu # sysname SW1 # vlan batch 10 20 # interface Vlanif10ip address 192.168.10.254 255.255.255.0 # interface Vlanif20ip address 192.168.20.253 255.255.255.0 # interface GigabitEthernet0/0/1port link-type accessport default vl…

java導入excel

這樣讀取excel時,得到的是結果值,而不是單元格的公式 import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil;InputStream inputStream file.getInputStream(); ExcelReader reader ExcelUtil.getReader(inputStream, 1); L…

stm32cube ide如何生成LL庫工程

在 STM32Cube IDE 里生成使用 LL(Low Layer)庫的工程,可按以下步驟操作: 1. 新建 STM32 工程 啟動 STM32Cube IDE,選擇File→New→STM32 Project。依據需求挑選目標 MCU 型號,接著點擊Next。 2. 配置工程…

阿里通義實驗室突破空間音頻新紀元!OmniAudio讓360°全景視頻“聲”臨其境

在虛擬現實和沉浸式娛樂快速發展的今天,視覺體驗已經遠遠不夠,聲音的沉浸感成為打動用戶的關鍵。然而,傳統的視頻配音技術往往停留在“平面”的音頻層面,難以提供真正的空間感。阿里巴巴通義實驗室(Qwen Lab&#xff0…

二十八、面向對象底層邏輯-SpringMVC九大組件之ViewResolver接口設計

在 Spring MVC 框架中,視圖解析器(ViewResolver)是連接控制器邏輯與具體視圖技術的核心紐帶。它通過抽象化的接口設計,將視圖的渲染邏輯與業務邏輯解耦,使開發者能夠靈活支持 JSP、Thymeleaf、FreeMarker 等多種視圖技…

LiveWallpaperMacOS:讓你的 Mac 桌面動起來

隨著桌面美化需求的不斷提升,用戶對于桌面壁紙的要求已經不再局限于靜態圖片。越來越多的 Mac 用戶希望桌面能像 Windows 一樣,擁有動態壁紙,展現個性、提升體驗。LiveWallpaperMacOS 正是這樣一款讓你的 Mac 桌面煥發活力的開源項目。 本文將詳細介紹 LiveWallpaperMacOS …

豆瓣電視劇數據工程實踐:從爬蟲到智能存儲的技術演進(含完整代碼)

通過網盤分享的文件:資料 鏈接: https://pan.baidu.com/s/1siOrGmM4n-m3jv95OCea9g?pwd4jir 提取碼: 4jir 1. 引言 1.1 選題背景 在影視內容消費升級背景下,豆瓣電視劇榜單作為國內最具影響力的影視評價體系,其數據價值體現在&#xff1a…

集成均衡功能電池保護芯片在大功率移動電源的應用,創芯微CM1341-DAT、杰華特JW3312、賽微微電CW1244、中穎SH366006

一文了解集成均衡功能電池保護IC在大功率移動電源的應用 創芯微CM1341-DAT 創芯微CM1341-DAT是一款專用于4串鋰離子/磷酸鐵鋰電池的保護芯片,內置有高精度電壓檢測電路和電流檢測電路。通過檢測各節電池的電壓、充放電電流及溫度等信息,實現電池過充電…