C# 代码生成二维码方法及代码示例(QRCoder)

背景

二维码是越来越流行了,很多地方都有可能是使用到。如果是静态的二维码还是比较好处理的,通过在线工具就可以直接生成一张二维码图片,比如:草料二维码。但有的时候是需要动态生成的(根据动态数据生成),这个使用在线就工具就无法实现了。最好是能在代码中直接生成一个二维码图片,这里我就介绍下使用QRCoder类库在代码中生成二维码。

网上生成二维码的组件还是挺多的,但是真正好用且快速的却不多。QRCoder就是我在众多中找到的,它的生成速度快、而且使用也相当方便。

开始编码

1、安装 QRCoder组件。在项目上通过NuGet包管理器来安装,搜索名称:QRCoder

2、在代码中添加引用:using QRCoder;

3、编码生成

  private void RenderQrCode(){string level = comboBoxECC.SelectedItem.ToString();QRCodeGenerator.ECCLevel eccLevel = (QRCodeGenerator.ECCLevel)(level == "L" ? 0 : level == "M" ? 1 : level == "Q" ? 2 : 3);using (QRCodeGenerator qrGenerator = new QRCodeGenerator()){using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(textBoxQRCode.Text, eccLevel)){using (QRCode qrCode = new QRCode(qrCodeData)){pictureBoxQRCode.BackgroundImage = qrCode.GetGraphic(20, Color.Black, Color.White,GetIconBitmap(), (int) iconSize.Value);this.pictureBoxQRCode.Size = new System.Drawing.Size(pictureBoxQRCode.Width, pictureBoxQRCode.Height);//Set the SizeMode to center the image.this.pictureBoxQRCode.SizeMode = PictureBoxSizeMode.CenterImage;pictureBoxQRCode.SizeMode = PictureBoxSizeMode.StretchImage;}}}}

运行效果

上面代码运行的结果

加个Logo吧

还可以加上logo

  private Bitmap GetIconBitmap(){Bitmap img = null;if (iconPath.Text.Length > 0){try{img = new Bitmap(iconPath.Text);}catch (Exception){}}return img;}

完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QRCoder;
using System.Drawing.Imaging;
using System.IO;namespace QRCoderDemo
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){comboBoxECC.SelectedIndex = 0; //Pre-select ECC level "L"RenderQrCode();}private void buttonGenerate_Click(object sender, EventArgs e){RenderQrCode();}private void RenderQrCode(){string level = comboBoxECC.SelectedItem.ToString();QRCodeGenerator.ECCLevel eccLevel = (QRCodeGenerator.ECCLevel)(level == "L" ? 0 : level == "M" ? 1 : level == "Q" ? 2 : 3);using (QRCodeGenerator qrGenerator = new QRCodeGenerator()){using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(textBoxQRCode.Text, eccLevel)){using (QRCode qrCode = new QRCode(qrCodeData)){pictureBoxQRCode.BackgroundImage = qrCode.GetGraphic(20, Color.Black, Color.White,GetIconBitmap(), (int) iconSize.Value);this.pictureBoxQRCode.Size = new System.Drawing.Size(pictureBoxQRCode.Width, pictureBoxQRCode.Height);//Set the SizeMode to center the image.this.pictureBoxQRCode.SizeMode = PictureBoxSizeMode.CenterImage;pictureBoxQRCode.SizeMode = PictureBoxSizeMode.StretchImage;}}}}private Bitmap GetIconBitmap(){Bitmap img = null;if (iconPath.Text.Length > 0){try{img = new Bitmap(iconPath.Text);}catch (Exception){}}return img;}private void selectIconBtn_Click(object sender, EventArgs e){OpenFileDialog openFileDlg = new OpenFileDialog();openFileDlg.Title = "Select icon";openFileDlg.Multiselect = false;openFileDlg.CheckFileExists = true;if (openFileDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK){iconPath.Text = openFileDlg.FileName;if (iconSize.Value == 0){iconSize.Value = 15;}}else{iconPath.Text = "";}}private void btn_save_Click(object sender, EventArgs e){// Displays a SaveFileDialog so the user can save the ImageSaveFileDialog saveFileDialog1 = new SaveFileDialog();saveFileDialog1.Filter = "Bitmap Image|*.bmp|PNG Image|*.png|JPeg Image|*.jpg|Gif Image|*.gif";saveFileDialog1.Title = "Save an Image File";saveFileDialog1.ShowDialog();// If the file name is not an empty string open it for saving.if (saveFileDialog1.FileName != ""){// Saves the Image via a FileStream created by the OpenFile method.using (FileStream fs = (System.IO.FileStream) saveFileDialog1.OpenFile()){// Saves the Image in the appropriate ImageFormat based upon the// File type selected in the dialog box.// NOTE that the FilterIndex property is one-based.ImageFormat imageFormat = null;switch (saveFileDialog1.FilterIndex){case 1:imageFormat = ImageFormat.Bmp;break;case 2:imageFormat = ImageFormat.Png;break;case 3:imageFormat = ImageFormat.Jpeg;break;case 4:imageFormat = ImageFormat.Gif;break;default:throw new NotSupportedException("File extension is not supported");}pictureBoxQRCode.BackgroundImage.Save(fs, imageFormat);fs.Close();}}}public void ExportToBmp(string path){}private void textBoxQRCode_TextChanged(object sender, EventArgs e){RenderQrCode();}private void comboBoxECC_SelectedIndexChanged(object sender, EventArgs e){RenderQrCode();}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你对手机打字一无所知!| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(视频源网络,侵权删)你真的会打字吗↓ ↓ ↓

并行中的分区Partitioner

本篇介绍在C#中,把一个大集合,或大数组分成若干个区来执行。Demo中是把一组字符串放在list中,然后并行生成MD5串,返回回来。using System; using System.Collections.Generic; using System.Reflection; using System.Threading.T…

搞笑诺贝尔颁出,中国科学家入选!阿蟑有磁性、睾丸热不对称,10大奇葩研究来了...

全世界只有3.14 % 的人关注了青少年数学之旅Laugh and think,科学的另一面,就是有趣!——在今天的哈佛大学桑德斯剧场,一群科学家身体力行地证明了这件事,在诺贝尔奖颁出前夕,率先发布了今年的“搞笑诺贝尔…

C++中的对象数组

类是对象的抽象,我们可以使用一个类来定义很多的对象,然后每个对象都有自己的属性。 当我们使用类来定义很多相同结构的对象的时候,我们可以采取对象数组的方法。 例如,一个班有50个学生,我们定义了一个学生类&#xf…

周杰伦新歌《说好不哭》彩蛋大汇总! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅一首单曲,就霸占了一半的微博热搜榜,除了周杰伦,估计也没别人能做得到了。回想起前段时间,周杰伦的中老年粉丝与ikun们围绕着“顶级流量”展开的那场battle...说实话,那场 b…

AI日报:2024年人工智能对各行业初创企业的影响

欢迎订阅专栏 《AI日报》 获取人工智能邻域最新资讯 文章目录 2024年人工智能对初创企业的影响具体行业医疗金融服务运输与物流等 新趋势 2024年人工智能对初创企业的影响 2023年见证了人工智能在各个行业的快速采用和创新。随着我们步入2024年,人工智能初创公司正…

Ant Design Blazor 组件库的路由复用多标签页介绍

前言Blazor 是 .NET 最新的前端框架,可以基于 WebAssembly 或 SignalR (WebSocket)构建前端应用程序,基于 WebAssembly 托管模型的 Blazor 甚至可以离线运行。再加上可以共用 .NET 类库,能使代码量比以往的基于 JS 的前…

AI 竟然通过了初中生考试!?这意味着什么?

全世界只有3.14 % 的人关注了青少年数学之旅2016 年 AlphaGo 战胜世界棋王李世石,被认为是人工智能一个重要的里程碑。此后 AlphaGo 又击败了世界排名第一的围棋选手柯洁,AI 也在德州扑克、Dota 2 等游戏上战胜了专业的人类玩家,越来越聪明的…

基于Yarp实现内网http穿透

Yarp介绍YARP是微软开源的用来代理服务器的反向代理组件,可实现的功能类似于nginx。基于YARP,开发者可以非常快速的开发一个性能不错的小nginx,用于代理http(s)请求到上游的http(s)服务。http穿透原理同网现象在http反向代理里,代…

男科医生到底有多不正经… | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源真是个鬼才)赶紧转给了身边有这种经历的朋友↓ ↓ ↓

5张图带你了解Pulsar的存储引擎BookKeeper

Apache BookKeeper是一款企业级存储系统,最初由雅虎研究院研发,在2011年作为Apache ZooKeeper的子项目进行孵化,在2015年1月成为 Apache顶级项目。起初,BookKeeper是一个预写日志(WAL)系统,经过几年的发展,…

筛选装置用c语言编程,一种空壳瓜子筛选装置的制作方法

本实用新型涉及食品机械领域,特别是一种空壳瓜子筛选装置。背景技术:食品机械是指把食品原料加工成食品(或半成品)过程中所应用的机械设备和装置。食品工业是我国国民经济的支柱产业,食品机械是为食品工业提供装备的行业。随着人民生活水平的…

不止 Windows 10!Windows 7/8 也能免费升级到 Windows 11

起初,微软宣布为 Windows 7、Windows 8 和 Windows 8.1 用户提供的 Windows 10 免费升级于 2016 年结束。Windows 11 免费升级近日,微软表示将继续支持从 Windows 7、Windows 8 和 Windows 8.1 用户免费升级到 Windows 10 或 Windows 11 ,只要…

c语言求平衡因子,平衡二叉树(AVL树)的基本操作

0x00、平衡二叉树的定义平衡二叉树(AVL树)是一种特殊的二叉搜索树,只是在二叉搜索树上增加了对"平衡"的需求。假如一棵二叉搜索树,按照“1,2,3,4,5”的顺序插入数据,会发现二叉树甚至变成了一个线性的链表状结构,这样查…

学校老师绝对不会教的方法,让你的孩子拥有一个开挂般的人生!

比勤奋更重要的,是孩子的思维能力。从上幼儿园开始,很多父母很喜欢给孩子报各种兴趣班,比如钢琴班、英语班、乐高班、报各种各样的课程,就是希望孩子具有18般武艺,赢在起跑线上。其实除了外在的能力,不显山…

解答网友提问:如何构建动态表达式实现高级查询服务

上次我们介绍了"一秒创建高级查询服务"。前天,有网友在公众号后台问我,怎么使用动态表达式:我想应该是客户提出了更高的要求,查询的条件不仅限于大于、小于,更加多样化,需要动态组合成条件&#…

π!到底蕴藏了多少不为人知的秘密?|今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源网络,侵权删)赶紧检查一下π里面有没有你的秘密↓ ↓ ↓

.net core 下的分布式事务锁

系统分布式锁的用法公司框架新增功能分布式锁&#xff1a;锁的性能之王&#xff1a;缓存 > Zookeeper > 数据库锁的实现实现原理&#xff1a;核心采用StackExchange.Redis的LockTake方法实现。支持同步获取锁&#xff0c;或者等待直到超时获取锁。/// <summary>///…

刚刚!华为mate30 pro全球首发,三星黯然失色,iPhone11甚至都被吓降价了

全世界只有3.14 % 的人关注了青少年数学之旅众望所归&#xff0c;9月19日&#xff0c;华为在德国慕尼黑发布了Mate30系列。看完发布会&#xff0c;数据汪给大家总结了几个看点&#xff1a;1.全球一样的版本本次华为mate30系列采用的是EMUI 10系统&#xff0c;不会搭载谷歌旗下的…

c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

1.埃尔米特(Hermite)插值1.1.Hermite插值多项式如果对插值函数&#xff0c;不仅要求它在节点处与函数同值&#xff0c;而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值&#xff0c;这就是 Hermite 插值问题。本节主要讨论在节点处插值函数与函数的值及一阶导数值均相等的…