C# 生成二维码方法(QRCoder)

百家 作者:程序员的那些事 2022-02-15 14:00:03

推荐关注↓

前言

二维码很多地方都有使用到。如果是静态的二维码还是比较好处理的,通过在线工具就可以直接生成一张二维码图片,比如:草料二维码。

但有的时候是需要动态生成的(根据动态数据生成),这个使用在线就工具就无法实现了。最好是能在代码中直接生成一个二维码图片,介绍下使用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 -

推荐阅读??点击标题可跳转

1、女娲算法,杀疯了!

2、从此明白了卷积神经网络(CNN)

3、为什么腾讯/阿里不去开发被卡脖子的工业软件?


关注「程序员的那些事」加星标,不错过圈内事

点赞和在看就是最大的支持?

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接