精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 如何實現二維碼的生成

admin
2024年12月24日 9:47 本文熱度 541

前言

二維碼(Quick Response Code)也稱二維條碼,是流行的一種編碼方式,它比條形碼(Barcode)能儲存更多的信息。現在的很多場景都在使用。使用C#如何實現二維碼的生成,本文介紹二種實現二維碼的類庫及其實現。

QRCoder

QRCoder是一個用 C# 編寫的簡單庫,可以實現二維碼的生成。它不依賴其它外部庫,項目使用是通過NuGet引用。

下面通過示例演示實現:

定義一個獲取二維碼中間圖片的方法

/// <summary>/// 獲取顯示在二維碼中間的圖片/// </summary>/// <param name="iconPath"></param>/// <returns></returns>public  Bitmap GetBitmap(string iconPath){    if (File.Exists(iconPath))    {        return new Bitmap(iconPath);    }    return null;}
定義生成二維碼的方法
/// <summary>/// 生成二維碼/// </summary>/// <param name="qrCodeContent ">二維碼的內容</param>/// <param name="imagePath ">顯示在二維碼中間的圖片</param>/// <param name="level">QR碼的糾錯能力,由低到高:L、M、Q、H。</param>public void Generator(string qrCodeContent,string imagePath, ECCLevel level){    using (QRCodeGenerator qrGenerator = new QRCodeGenerator())    {        using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(qrCodeContent, level))        {            int iconSize = 15;            using (QRCode qrCode = new QRCode(qrCodeData))            {                using (Bitmap bitmap = qrCode.GetGraphic(20, Color.Black, Color.White, GetBitmap(imagePath), (int)iconSize))                {                    string qrImagePath = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "qr.png");                    bitmap.Save(qrImagePath);                }            }        }    }}
調用生成
namespace Fountain.WinConsole.QRCodeDemo{    internal class Program    {        static void Main(string[] args)        {            QRExtend qRExtend = new QRExtend();            qRExtend.Generator("dotNet開發技術分享"string.Format("{0}{1}"AppDomain.CurrentDomain.BaseDirectory"1.jpeg"), QRCoder.Core.QRCodeGenerator.ECCLevel.M);            Console.ReadKey();        }    }}

SkiaSharp.QrCode

SkiaSharp是基于Google的Skia圖形庫的.NET封裝,它用于2D圖像繪制的開源庫。適用于多個平臺包括Windows、macOS、Linux等。而它也提供了二維碼的庫SkiaSharp.QrCode(跨平臺支持)。項目使用通過NuGet引用SkiaSharp.QrCode。

下面通過示例演示實現:

定義一個獲取二維碼中間圖片的方法

/// <summary>/// 獲取顯示在二維碼中間的圖片/// </summary>/// <param name="iconPath"></param>/// <returns></returns>public SKData GetSKData(string iconPath){    if (File.Exists(iconPath))    {        return SKData.Create(iconPath);    }    return null;}

定義生成二維碼的方法

/// <summary>/// 生成二維碼/// </summary>/// <param name="qrCodeContent ">二維碼的內容</param>/// <param name="imagePath ">顯示在二維碼中間的圖片</param>/// <param name="level">QR碼的糾錯能力,由低到高:L、M、Q、H。</param>public void Generator(string text, string imagePath, ECCLevel level){    using (QRCodeGenerator generator = new QRCodeGenerator())    {        using (QRCodeData qRCode = generator.CreateQrCode(text, ECCLevel.H))        {            // 創建一個Canvas            SKImageInfo info = new SKImageInfo(300, 300);                        using (SKSurface surface = SKSurface.Create(info))            {                SKCanvas canvas = surface.Canvas;                // 渲染二維碼到Canvas                canvas.Render(qRCode, info.Width, info.Height);                // 獲取二維碼中間繪制圖片數據                SKData sKData = GetSKData(imagePath);                if (sKData != null)                {                    // 在二維碼中間繪制圖片 如頭像                    using (var avatarImage = SKImage.FromEncodedData(SKData.Create(imagePath)))                    {                        // 按比率縮放中間圖片大小                        float ratio = (float)140 / info.Width;                        int width = (int)(140* ratio);                        int height = (int)(140 * ratio);                        //定義繪制頭像的位置和尺寸                        var rect = SKRect.Create((info.Width - width) / 2, (info.Height - height) / 2, width, height);                        //繪制頭像                        canvas.DrawImage(avatarImage, rect);                    }                }                // 輸出到文件                using (SKImage image = surface.Snapshot())                {                    using (var imageData = image.Encode(SKEncodedImageFormat.Png, 100))                    {                        using (var stream = File.OpenWrite(@"QRCode.png"))                        {                            // 保存圖片                            imageData.SaveTo(stream);                        }                    }                }            }        }      }}

調用生成

using SkiaSharp.QrCode;namespace Fountain.WinConsole.QRCodeDemo{    internal class Program    {        static void Main(string[] args)        {            QRExtend qRGExtend = new QRGxtend();            qRExtend.Generator("dotNet開發技術分享公眾號"string.Format("{0}{1}"AppDomain.CurrentDomain.BaseDirectory"1.jpeg"), ECCLevel.M);            Console.ReadKey();        }    }}

小結

以上是在C#中使用QRCoder與SkiaSharp.QrCode 兩個類實現簡單的示例。希望本文對您有所收獲。


該文章在 2024/12/24 9:47:01 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产女人乱人伦精品一区二区 | 色欲精品国产AV久久久 | 国产成人麻豆亚洲综合无码精 | 亚洲av高清在线观看一区二区 | 午夜毛片不卡免费观看视频 | 天美传媒新剧国产剧影视公司 | 亚洲人成人无码网WWW电影首页 | 亚洲一区成人 | 精品国产高清自在线一区二区 | 国产三级毛片基地 | 国产av一区二区精品久久凹凸 | 国产中文精品无码欧美综合 | 少妇高潮不断出白浆av | 亚洲中文不卡电影在线 | 亚洲欧美日韩中文高清www777 | 亚洲av日韩av高清在线观看 | 涩涩伊人久久无码欧美 | 久久久亚洲精品蜜桃臀 | 99精品视频69v精品视频免费 | 精品水蜜桃久久久久久久 | 欧美亚洲国产激情一区二区 | 一区二区三区网站 | 日韩人妻无码一区二区三区中文 | 亚洲乱码爆乳精品成人毛片 | 中文字幕无码精品三级 | JLZZJLZZ日本人护士水好多 | 在线播放国产真实女同事 | 91精品久久久无码午夜福利 | 亚洲蜜芽在线精品一区 | 亚洲精品国自产在线 | 国产乱子伦视频一区二区三区 | 国产在线精品一区二区不卡顿 | 四虎影视国产精品永久地址 | 专区国产精品第一页 | 精品人妻va出轨中文字幕不卡漫画日本欧美 | 久久最喜欢的中文字幕 | 精品久久久久国产 | 熟妇女人妻丰满少妇中文字幕 | 日韩欧美一区二区三区不卡 | 精品欧美国产一区二区三区 | 日韩在线视频www色 日韩在线视频观看在线看 日韩在线视频免费不卡一区 |