一、背景 e# ?; h4 E- ?# F
二维码是越来越流行了,很多地方都有可能是使用到。如果是静态的二维码还是比较好处理的,通过在线工具就可以直接生成一张二维码图片,比如:草料二维码。但有的时候是需要动态生成的(根据动态数据生成),这个使用在线就工具就无法实现了。最好是能在代码中直接生成一个二维码图片,这里我就介绍下使用QRCoder类库在代码中生成二维码。
) e! W# U% S8 K6 k2 E4 h 网上生成二维码的组件还是挺多的,但是真正好用且快速的却不多。QRCoder就是我在众多中找到的,它的生成速度快、而且使用也相当方便。$ n" F) T6 J, c/ ^
二、开始编码% c3 p! t0 y$ d* K
1、安装 QRCoder组件。在项目上通过NuGet包管理器来安装,搜索名称:QRCoder
/ h% a; \; X$ p2、在代码中添加引用:using QRCoder;3 O2 F# j- i7 ~3 g! e; j7 h! y& F
3、编码生成$ t8 h; J' \& P% D3 U+ H4 Z
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;
}
}
}
}
1 K5 y5 b: ~+ D7 N- ?
三、加个Logo吧
; h' h3 r8 v5 l还可以加上logo
: k1 |- U! H G% W! `- `- ?9 K/ W* `2 k( O/ H& S3 b; @ V. w
private Bitmap GetIconBitmap()
{
Bitmap img = null;
if (iconPath.Text.Length > 0)
{
try
{
img = new Bitmap(iconPath.Text);
}
catch (Exception)
{
}
}
return img;
}
0 `9 s' i6 q! N3 p五、完整代码
* E2 Y- v& f' s; ~" P- j5 Rusing 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();
}
}
}
|