c#生成二维码二维码中间添加定制LoGo

🚀介绍

🍀QRCoder是一个开源的.NET库,用于生成QR码(Quick Response Code)。这个库是用C#编写的,并且可以在.NET框架的各种版本上使用,包括.NET Framework, .NET Core, Mono, Xamarin等。QRCoder提供了一个简单易用的API,允许开发者快速地在他们的应用程序中生成QR码图像。

使用QRCoder,你可以创建不同类型的QR码,包括文本、URL、联系信息(vCard)、电子邮件、SMS、MMS、地理位置等。此外,它还支持生成带有自定义颜色、大小和边距的QR码,以及添加标志或图标到QR码中心的功能。

🐳下面案例演示如何在c#项目中使用QRCoder生成一个像下面一样携带logo的二维码,并且在扫描的时候可以跳转到我们设置的链接中

🚀案例

🍀安装nuget包 QRCoder

在 NuGet 包管理器控制台中运行以下命令

PM> Install-Package QRCoder -Version 1.4.2

或者直接用Nuget包管理器手动搜索安装,建议使用1.4.2版本,其他版本的用法可能存在差异

 🍀引入QRCoder的命名空间 using QRCoder,然后就可以直接在项目中使用

public class Program
{
    public static void Main(string[] args)
    {
        //创建一个QRCodeGenerator的实例,这是QRCoder库中用于生成QR码的核心类
        var qrCodeGenerator = new QRCodeGenerator();

        //CreateQrCode()中第一个参数是文本内容(这里我放的是我csdn的链接)
        //第二个参数是错误矫正等级
        QRCodeData qrCodeData = qrCodeGenerator.CreateQrCode(
            "https://blog.csdn.net/weixin_65243968?spm=1010.2135.3001.5343",
            QRCodeGenerator.ECCLevel.H);

        //使用前面生成的qrCodeData来创建一个QRCode的实例,这个实例将用于生成实际的二维码图像
        QRCode qrCode = new QRCode(qrCodeData);

        //GetGraphic方法的参数指定了二维码的像素大小、前景色、背景色以及是否要绘制一个白色的边框。
        //在这个例子中,每个QR码模块的大小被设置为15像素,前景色为黑色,背景色为白色,并且绘制了白色边框
        Bitmap bitmap = qrCode.GetGraphic(15,
            Color.Black,
            Color.White, true);

        //将Bitmap对象转换为一个Image对象
        Image image = Image.FromHbitmap(bitmap.GetHbitmap());

        image.Save(@"test.png");
    }
}

 

🍀在上面例子中,设置了 QRCodeGenerator.ECCLevel.H,它的作用是什么呢

QRCodeGenerator.ECCLevel 是一个枚举,它定义了在生成二维码时使用的错误更正级别。错误更正能力允许二维码在部分损坏的情况下仍然能够被扫描和解码。QRCodeGenerator.ECCLevel 枚举中的每个值代表了不同的错误更正能力:

  • L:大约 7% 的错误更正能力。
  • M:大约 15% 的错误更正能力。
  • Q:大约 25% 的错误更正能力。
  • H:大约 30% 的错误更正能力。

H 和 Q 级别之间的主要区别在于它们提供的错误更正能力。H 级别提供的错误更正能力最高,大约是 30%,而 Q 级别提供的错误更正能力稍低,大约是 25%。这意味着 H 级别的二维码可以在更多的数据损坏情况下仍然被解码。

选择哪个错误更正级别通常取决于应用场景和对二维码耐用性的需求。如果你预计二维码可能会在恶劣环境下使用,或者有较高的损坏风险,那么选择更高的错误更正级别(如 H)可能更合适。然而,需要注意的是,随着错误更正级别的提高,二维码的复杂性也会增加,这可能会导致二维码的尺寸变大,因为需要更多的数据来实现错误更正。‘

🍀此时运行项目,图片保存位置会生成一张像下面一样的二维码

🍀如需要添加logo,只需要在原来的GetGraphic 方法中添加三个参数

  • logo: 这是你想要放在二维码中心的图标,它应该是一个 Bitmap 对象。在这个例子中,它是从名为 "logo.png" 的文件中加载的。

  • 20: 这个参数定义了 logo 图像的最大宽度(以像素为单位)。在这个例子中,logo 的最大宽度被设置为 20 像素。如果 logo 的实际宽度超过了这个值,它将被缩放以适应这个最大宽度。

  • 2: 这个参数定义了在 logo 周围绘制的白色边框的厚度(以像素为单位)。在这个例子中,边框的厚度被设置为 2 像素。

🍀运行项目,在设置的图片保存位置中生成了一张二维码图片

 

🍀打开微信扫一下,可以正常跳转到我设置的文本内容URL,也就是我的CSDN界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/233487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Linux内核网络-拥塞控制系列(二)

上篇文章:深入解析Linux内核网络-拥塞控制系列(一)对Linux内核网络中网络拥塞框架的框架进行了分析。本次针对具体的Cubic拥塞控制算法进行简单分析。在进行代码的梳理前,同样还是先来看一下相关概念、原理: 在上一篇文章中也提到…

电脑出现这些现象,说明你的固态硬盘要坏了

与传统机械硬盘(HDD)相比,固态硬盘(SSD)速度更快、更稳定、功耗更低。但固态硬盘并不是完美无瑕的,由于颗粒写入机制,可能会在七到十年的预期寿命之前出现故障。所以用户最好为最终故障做好准备…

vue3 自己写一个月的日历

效果图 代码 <template><div class"monthPage"><div class"calendar" v-loading"loading"><!-- 星期 --><div class"weekBox"><div v-for"(item, index) in dayArr" :key"index&q…

认识计算机的设备管理

在计算机系统中&#xff0c;除了处理器和内存之外&#xff0c;其他的大部分硬设备称为外部设备。它包括输入/输出设备&#xff0c;辅存设备及终端设备等。这些设备种类繁多&#xff0c;特性各异&#xff0c;操作方式的差异很大&#xff0c;从而使操作系统的设备管理变得十分繁杂…

数据仓库工具Hive

1. 请解释Hive是什么&#xff0c;它的主要用途是什么&#xff1f; Hive是一个基于Hadoop的数据仓库工具&#xff0c;主要用于处理和分析大规模结构化数据。它可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类似SQL的查询功能&#xff0c;将SQL语句转换为MapRedu…

使用 iperf 和 iftop 测试网络带宽

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

京东商品详情数据在数据分析行业中的重要性

京东商品详情数据在数据分析行业中具有重要作用。这些数据提供了丰富的信息&#xff0c;可以帮助企业了解市场趋势、消费者需求、产品表现以及运营策略等多个方面。 首先&#xff0c;京东商品详情数据可以为企业提供市场趋势分析的依据。通过观察商品的销售量、销售额、价格等…

Qt 6.5 类库实例大全:QObject

大家好&#xff0c;我是20YC小二&#xff01;福利时间&#xff1a;欢迎(wx)扫码关注&#xff0c;免费领取《C程序员入门必修第一课&#xff1a;C基础课程》在线视频教程&#xff0c;还有更多技术分享&#xff01;#下面进入今天内容# 1. QObject 介绍 QObject 是 Qt 库中最重要…

RocketMq集成SpringBoot(待完善)

环境 jdk1.8, springboot2.7.3 Maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version><relativePath/> <!-- lookup parent from…

C++学习笔记:继承

继承 什么是继承?继承的写法基类和派生类的赋值转换继承中的作用域派生类的默认成员函数单继承,多继承,虚拟继承is-a 和 has-a 什么是继承? 继承是C语言面向对象的三大特性之一&#xff0c;是面向对象程序设计使代码可以复用的最重要的手段,基本都是在一个类的基础上为了增加…

一个简单的可视化的A星自动寻路

一个简单的应用场景&#xff0c;流程图连线 源码&#xff1a; addExample("A星路径查找", function () {return {template: <div><div ref"main"></div></div>,data() { return {}; },computed: {},methods: {},mounted() {var c…

2-3、运算符

语雀原文链接 文章目录 1、算术运算符2、关系运算符3、逻辑运算符4、赋值运算符5、移位运算符6、位运算符(二进制位进行运算)7、条件运算符:三目运算符8、运算符的优先级 1、算术运算符 &#xff1a;加法-&#xff1a;减法*&#xff1a;乘法/&#xff1a;除法取商%&#xff1…

logback日志框架使用

依赖引入 <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.7</version> </dependency> 使用logback日志框架只需要引入以上即可&#xff0c;(我们平时使用较多的Slf4j…

Fall in love with English

Fall in love with English 爱上英语 Hiding behind the loose dusty curtain, a teenager packed up his overcoat into the suitcase. 躲藏在布满尘土的松软的窗帘后边&#xff0c;一个年轻人打包他的外套到行李箱中。 He planned to leave home at dusk though there was th…

ssh免密登录及scp/rsync免密传输文件的方式

在通过ssh登录其它电脑或通过scp/rsync同其它电脑之间传输文件时&#xff0c;每次都需要输入密码&#xff0c;如下图所示&#xff1a;在windows10上通过ssh登录虚拟机&#xff0c;每次登录都需要输入密码&#xff1b;若端口默认为22,可省略通过-p指定 可通过将本机上的公钥key存…

熔池处理Tecplot 360 和CFD-Post做出一样的效果

熔池处理Tecplot 360 和CFD-Post做出一样的效果 效果展示详细讲述Tecplot 360实现过程分析实现过程第一步实现过程第二步界面美化注意点效果展示 详细讲述Tecplot 360实现过程 分析 这里主要是将体积分数大于0.5的区域抽取出来,然后显示温度场,所以这里主要考虑下面连个思考…

Agent相关工作调研

API Bank 要解决两个问题&#xff1a; 1)目前的LLM在使用工具方面的效果如何&#xff1f; 2) LLM使用工具还存在哪些障碍&#xff1f; 理想的效果&#xff1a;&#xff1a;通过访问全球工具存储库&#xff0c;LLM可以通过概述实现需求所需的所有步骤来帮助人们规划需求。随后…

你知道Java中的BigInteger类和BigDecimal类吗?

BigInteger和BigDecimal&#xff1a; 我们在学习JavaSE基础的时候学习过int和double&#xff0c;前者是整形&#xff0c;后者是双精度浮点数&#xff0c;但它们是有最大值的&#xff0c;也就是说&#xff0c;他两并不支持无限大的数字。 其范围如下所示&#xff1a; 因此对于…

图论-并查集

并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有求连通子图,求最小生成树Kruskal算法和最近公共祖先(LCA)等. 并查集的基本操作主要有: .1.初始化 2.查询find 3.合并union 一般我们都会采用路径压缩 这样…

Java期末复习题之分支循环

点击返回标题->23年Java期末复习-CSDN博客 第1题. 编写一个模拟同时掷骰子的程序。要用Math.random()模拟产生两个骰子&#xff0c;将两个结果相加&#xff0c;相加的和等于7的可能性最大&#xff0c;等于2和12的可能性最小。程序模投掷3600次&#xff0c;判断求和的结果是否…