2020-12-31

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

 

 

 

 









原文转载:http://www.shaoqun.com/a/504621.html

跨境电商:https://www.ikjzd.com/

stadium:https://www.ikjzd.com/w/2729

兰亭集势:https://www.ikjzd.com/w/820


背景二维码是越来越流行了,很多地方都有可能是使用到。如果是静态的二维码还是比较好处理的,通过在线工具就可以直接生成一张二维码图片,比如:草料二维码。但有的时候是需要动态生成的(根据动态数据生成),这个使用在线就工具就无法实现了。最好是能在代码中直接生成一个二维码图片,这里我就介绍下使用QRCoder类库在代码中生成二维码。网上生成二维码的组件还是挺多的,但是真正好用且快速的却不多。QRCoder就
auction:auction
环球b2b:环球b2b
巫山小三峡旅游景点推荐 :巫山小三峡旅游景点推荐
美国商标注册多少钱?:美国商标注册多少钱?
海关总署:关于"先出区、后报关"有关事项的公告!:海关总署:关于"先出区、后报关"有关事项的公告!

No comments:

Post a Comment