一、背景
7 k5 _" E6 L V8 ]( n5 O+ K 二维码是越来越流行了,很多地方都有可能是使用到。如果是静态的二维码还是比较好处理的,通过在线工具就可以直接生成一张二维码图片,比如:草料二维码。但有的时候是需要动态生成的(根据动态数据生成),这个使用在线就工具就无法实现了。最好是能在代码中直接生成一个二维码图片,这里我就介绍下使用QRCoder类库在代码中生成二维码。
+ |5 |# F; m6 D1 v% l( J6 ^/ { 网上生成二维码的组件还是挺多的,但是真正好用且快速的却不多。QRCoder就是我在众多中找到的,它的生成速度快、而且使用也相当方便。
' Z) ^+ @* z# `! D二、开始编码
- Y: ~9 J" \. h( ^- ^$ l" @; D- M6 U1、安装 QRCoder组件。在项目上通过NuGet包管理器来安装,搜索名称:QRCoder
3 x8 L& g* U: Q4 q$ a) x2、在代码中添加引用:using QRCoder;, X: N5 S1 n: A+ Y
3、编码生成9 l( ~/ q6 f9 `# L8 {
- 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;
- }
- }
- }
- }
# f; q5 h: R0 s* i0 X& q
三、加个Logo吧
- V. r! _6 s* Y) `" O: S还可以加上logo3 {) k# Z- {5 y7 [
6 ^. ]$ p E! ^9 s6 p
- private Bitmap GetIconBitmap()
- {
- Bitmap img = null;
- if (iconPath.Text.Length > 0)
- {
- try
- {
- img = new Bitmap(iconPath.Text);
- }
- catch (Exception)
- {
- }
- }
- return img;
- }
& T8 Z! V9 Z! ^5 Y; y: |五、完整代码
! w# W. P9 y8 G' o$ P5 q% \- 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:
|