如何通过 C# 快速生成二维码 QR Code

二维码作为一种高效的信息承载方式,广泛应用于支付、物流、身份验证等场景。在 .NET 开发中,借助 Spire.Barcode for .NET 提供了一个轻量级且功能完整的解决方案,支持生成和读取多种条形码与二维码格式。本文将详细介绍如何使用该库生成二维码。


环境准备

首先,通过NuGet安装必要的包:

bash 复制代码
Install-Package Spire.Barcode

基础实现:生成简单二维码

以下示例展示如何生成一个包含文本内容的基础二维码,并保存为本地图片:

csharp 复制代码
using Spire.Barcode;
using System.Drawing;
using System.Drawing.Imaging;

namespace GenerateQRCode
{
    class Program
    {
        static void Main(string[] args)
        {
            // 初始化条码设置
            BarcodeSettings settings = new BarcodeSettings();
            // 将条码类型设置为 QR Code 二维码
            settings.Type = BarCodeType.QRCode;
            // 设置二维码内容(可自定义:文本、URL、手机号等)
            settings.Data = "https://www.example.com/";
            // 设置数字编码模式
            settings.QRCodeDataMode = QRCodeDataMode.Auto;
          
            // 创建二维码生成器实例
            BarCodeGenerator generator = new BarCodeGenerator(settings);
            // 生成二维码图片
            Image qr = generator.GenerateImage();
            // 保存图片
            qr.Save("QR Code.png", ImageFormat.Png);
        }
    }
}

代码解释

  • BarcodeSettings 类: 初始化配置对象,所有条码的生成规则(类型、数据、样式)都通过该对象配置;
  • QRCodeDataMode:数据编码模式。设为 Auto 时组件自动识别数据类型(如 URL、纯数字、中文),无需手动指定;
  • BarcodeGenerator 类:核心生成器类,将配置传入生成器,建立「配置 - 生成」的关联;
  • GenerateImage 方法: 基于配置生成二维码图片;
  • Save 方法:将生成的二维码保存为图片,第一个参数为保存路径,第二个参数为图片格式。

进阶功能:自定义二维码样式 (嵌入图片)

Spire.Barcode 支持在二维码中嵌入 logo 图片,并自定义二维码的显示文本、尺寸、纠错级别等,满足个性化需求。

csharp 复制代码
using Spire.Barcode;
using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace GenerateQRCode
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 1. 初始化二维码配置对象(精细化配置核心)
                BarcodeSettings settings = new BarcodeSettings();

                // 2. 基础类型与内容配置
                settings.Type = BarCodeType.QRCode; // 指定生成二维码
                settings.Data = "https://www.example.com/"; // 二维码核心数据
                settings.Data2D = "Scan to go to example.com"; // 二维码底部显示的文本)
                settings.ShowTextOnBottom = true; // 显示底部文本
                settings.TextFont = new Font(FontFamily.GenericSansSerif, 16.0f); // 底部文本字体与字号

                // 3. 二维码编码与容错配置
                settings.QRCodeDataMode = QRCodeDataMode.Auto; // 自动识别数据类型(文本/URL/数字等)
                settings.QRCodeECL = QRCodeECL.H; // 纠错级别H(最高,30%破损可恢复)

                // 4. 自定义码元尺寸(单个二维码小方块的宽度)
                settings.X = 3.0f;

                // 5. 嵌入Logo(建议Logo尺寸不超过二维码的15%-20%,避免影响识别)
                if (System.IO.File.Exists("Logo.png"))
                {
                    settings.QRCodeLogoImage = Image.FromFile("Logo.png");
                }
                else
                {
                    Console.WriteLine("未找到Logo.png,将生成无Logo的二维码");
                }

                // 6. 生成二维码并保存
                BarCodeGenerator generator = new BarCodeGenerator(settings);
                Image qrImage = generator.GenerateImage(); // 生成二维码图片对象
                qrImage.Save("CustomizeCode.png", ImageFormat.Png); // 保存为PNG格式(无压缩,识别率高)

                Console.WriteLine("二维码生成成功!文件路径:" + AppDomain.CurrentDomain.BaseDirectory + "QR Code.png");
            }
            catch (Exception ex)
            {
                Console.WriteLine("二维码生成失败:" + ex.Message);
            }

            Console.ReadLine();
        }
    }
}

关键参数说明

  • QRCodeLogoImage:嵌入 Logo 图。需确保图片文件路径正确,Logo 尺寸过大会导致二维码无法识别(建议占比≤20%);
  • QRCodeECL:QRCode 的纠错级别,可选值:
    • L:7% 的破损可恢复;
    • M:15% 的破损可恢复(默认);
    • Q:25% 的破损可恢复;
    • H:30% 的破损可恢复。

常见问题与注意事项

  1. Logo 图片路径问题 :若提示 "文件不存在",需检查 Logo.png 的路径,或使用绝对路径(如 C:/Images/Logo.png);
  2. 文本显示异常:若底部文本乱码或不显示,需确保字体存在,建议使用系统内置字体(如Arial、SimSun);
  3. 内容长度限制 :二维码的内容长度与纠错级别相关,纠错级别越高,可承载的字符数越少(如 H 级别最多可承载约128个汉字);
  4. 图片格式 :推荐使用 PNG 格式保存二维码,相比 JPG 无压缩失真,扫描识别率更高;
  5. 二维码识别失败:若嵌入 Logo 后无法识别,需缩小 Logo 尺寸(建议≤二维码的 15%),或降低纠错级别(如改为 Q/M)。

通过本文介绍的方法,开发者可以通过简单 API 快速实现二维码生成功能,并自定义显示文本、纠错级别、嵌入logo等关键参数。在实际项目中,建议根据具体需求对二维码的尺寸、颜色和内容进行优化,以确保最佳的扫描体验和用户体验。

相关推荐
zlinear数据采集卡1 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
唐青枫2 小时前
别把 ImmutableArray 当成只读 List:C#.NET 不可变数组深入详解
c#·.net
zlinear数据采集卡5 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
花落人散处8 小时前
CDiskClean 开发历程 —— 文件清理_目录树解析实现方案参考
c#
离陌在学C#9 小时前
C# 泛型:从基础到高级应用
开发语言·c#
Vertira9 小时前
C# 与 OpencvSharp 编程[基础目录]
c#
格林威11 小时前
多相机并行采图最佳实践:Task.WhenAll + 异常处理 + 资源释放
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·机器视觉
yuhulkjv33519 小时前
Claude表格复制到word不再崩溃,AI导出鸭批量导出+格式无损一键搞定
人工智能·ai·c#·word·ai导出鸭
arbboter1 天前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具