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

  • A+
所属分类:.NET技术
摘要

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

 

 

 

运行效果

上面代码运行的结果

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

 

 

 

 

 

加个Logo吧

还可以加上logo

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

 

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

 

 

 

 

 

 

 

完整代码

 

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();         }     } }

 

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