LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 如何实现二维码的生成

admin
2024年12月24日 9:47 本文热度 150

前言

二维码(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-2024 ClickSun All Rights Reserved