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
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?Image
????????????SaveFileDialog?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();
????????}
????}
}转自:UP技术控
链接:cnblogs.com/lyl6796910/p/13749491.html
- EOF -
关注「程序员的那些事」加星标,不错过圈内事
点赞和在看就是最大的支持?
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675








程序员的那些事
