C#如何使用QRCoder实现二维码生成与扫描

来源:图像处理网作者:弥生美月头衔:网络博主
导读:本期聚焦于小伙伴创作的《C#如何使用QRCoder实现二维码生成与扫描》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何使用QRCoder实现二维码生成与扫描》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中,二维码的生成与扫描是常见的功能需求,QRCoder作为纯C#实现的二维码库,无需依赖第三方原生组件,兼容.NET Framework和.NET Core/.NET 5+等多个运行时,是开发者实现相关功能的首选工具。本文将完整讲解从库引入到功能落地的全流程。

环境准备与库引入

首先需要在项目中引入QRCoder库,如果你使用的是Visual Studio,可以通过NuGet包管理器搜索QRCoder安装,也可以通过命令行执行以下命令:

// 使用NuGet命令行安装QRCoder
Install-Package QRCoder

安装完成后,在需要使用的代码文件中引入对应命名空间即可:

using QRCoder;
using System.Drawing; // 如果使用生成图片功能需要引入该命名空间

使用QRCoder生成二维码

QRCoder生成二维码的核心逻辑是创建QRCodeGenerator实例,设置二维码参数后生成数据,再通过QRCode类转换为图片。以下是基础生成示例:

public Bitmap GenerateQRCode(string content, int pixelsPerModule = 20)
{
    // 创建二维码生成器实例
    using (QRCodeGenerator generator = new QRCodeGenerator())
    {
        // 设置二维码参数:内容、纠错等级、编码模式等
        QRCodeData qrData = generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.Q);
        // 创建二维码实例,传入生成的数据
        using (QRCode qrCode = new QRCode(qrData))
        {
            // 生成二维码图片,设置每个模块的像素大小,背景和前景色
            Bitmap qrImage = qrCode.GetGraphic(pixelsPerModule, Color.Black, Color.White, true);
            return qrImage;
        }
    }
}

上述代码中,ECCLevel.Q表示中等纠错等级,可根据需求调整为L(低)、M(中)、Q(中高)、H(高),纠错等级越高,二维码被遮挡后仍能识别的概率越大,但相同内容下二维码密度会更高。

生成带Logo的二维码

如果需要给二维码添加中心Logo,可以在生成基础二维码后,将Logo图片绘制到二维码中心位置:

public Bitmap GenerateQRCodeWithLogo(string content, Image logo, int pixelsPerModule = 20)
{
    using (QRCodeGenerator generator = new QRCodeGenerator())
    {
        QRCodeData qrData = generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.Q);
        using (QRCode qrCode = new QRCode(qrData))
        {
            // 先生成基础二维码
            Bitmap qrImage = qrCode.GetGraphic(pixelsPerModule, Color.Black, Color.White, true);
            // 计算Logo绘制位置,放在中心,大小为二维码的1/5
            int logoWidth = qrImage.Width / 5;
            int logoHeight = qrImage.Height / 5;
            int logoX = (qrImage.Width - logoWidth) / 2;
            int logoY = (qrImage.Height - logoHeight) / 2;
            // 绘制Logo,注意Logo不要太大避免遮挡二维码关键区域
            using (Graphics g = Graphics.FromImage(qrImage))
            {
                g.DrawImage(logo, new Rectangle(logoX, logoY, logoWidth, logoHeight));
            }
            return qrImage;
        }
    }
}

C#实现二维码扫描功能

QRCoder本身仅支持二维码生成,扫描功能需要结合其他组件实现,常见的方案是配合ZXing.Net库完成二维码识别。首先同样通过NuGet安装ZXing.Net:

Install-Package ZXing.Net

安装完成后,实现二维码扫描的核心代码如下:

using ZXing;

public string ScanQRCode(Image qrImage)
{
    // 创建条形码读取器实例,支持二维码格式
    using (BarcodeReader reader = new BarcodeReader())
    {
        // 设置读取格式,只识别二维码
        reader.Options.PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.QR_CODE };
        // 尝试解码图片中的二维码
        Result result = reader.Decode((Bitmap)qrImage);
        if (result != null)
        {
            return result.Text; // 返回二维码存储的内容
        }
        return string.Empty; // 未识别到返回空字符串
    }
}

如果是桌面应用需要调用摄像头扫描,可以结合AForge.Video库获取摄像头帧,再将每一帧图片传入上述扫描方法,识别到结果后停止捕获即可。

常见问题与注意事项

  • 生成二维码时如果内容包含中文,需要确保编码正确,QRCoder默认使用UTF-8编码,大部分场景无需额外处理,若遇到乱码可手动指定编码为UTF-8。
  • 二维码扫描时如果图片模糊、光线过暗,识别成功率会下降,可在预处理阶段对图片进行灰度化、二值化等操作提升识别率。
  • 生成带Logo的二维码时,Logo面积建议不超过二维码总面积的30%,否则容易导致二维码无法正常识别。
  • 如果是Web项目生成二维码,可以将生成的Bitmap转换为Base64字符串返回给前端展示,无需保存本地文件。

总结

通过QRCoder和ZXing.Net的组合,C#开发者可以快速实现完整的二维码生成与扫描功能,两个库都是纯托管代码实现,无需依赖系统原生组件,跨平台兼容性良好。实际开发中可根据业务需求调整二维码的样式、纠错等级,以及扫描的预处理逻辑,满足不同场景的使用要求。

C#QRCoder二维码生成二维码扫描修改时间:2026-06-08 19:45:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。