C# 程式碼生成二維碼方法及程式碼示例(QRCoder)
阿新 • • 發佈:2020-12-31
背景
二維碼是越來越流行了,很多地方都有可能是使用到。如果是靜態的二維碼還是比較好處理的,通過線上工具就可以直接生成一張二維碼圖片,比如:草料二維碼。但有的時候是需要動態生成的(根據動態資料生成),這個使用線上就工具就無法實現了。最好是能在程式碼中直接生成一個二維碼圖片,這裡我就介紹下使用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(); } } }