<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C# 代碼生成二維碼方法及代碼示例(QRCoder)

          共 7199字,需瀏覽 15分鐘

           ·

          2021-02-03 07:58


          背景

          二維碼是越來越流行了,很多地方都有可能是使用到。如果是靜態(tài)的二維碼還是比較好處理的,通過在線工具就可以直接生成一張二維碼圖片,比如:草料二維碼。但有的時候是需要動態(tài)生成的(根據(jù)動態(tài)數(shù)據(jù)生成),這個使用在線就工具就無法實現(xiàn)了。最好是能在代碼中直接生成一個二維碼圖片,這里我就介紹下使用QRCoder類庫在代碼中生成二維碼。

          網(wǎng)上生成二維碼的組件還是挺多的,但是真正好用且快速的卻不多。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; } } } }


          運行效果

          上面代碼運行的結(jié)果


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



          往期精彩回顧




          【推薦】.NET Core開發(fā)實戰(zhàn)視頻課程?★★★

          .NET Core實戰(zhàn)項目之CMS 第一章 入門篇-開篇及總體規(guī)劃

          【.NET Core微服務(wù)實戰(zhàn)-統(tǒng)一身份認證】開篇及目錄索引

          Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

          .NET Core中的一個接口多種實現(xiàn)的依賴注入與動態(tài)選擇看這篇就夠了

          10個小技巧助您寫出高性能的ASP.NET Core代碼

          用abp vNext快速開發(fā)Quartz.NET定時任務(wù)管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實現(xiàn)作業(yè)調(diào)度

          現(xiàn)身說法:實際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

          關(guān)于C#異步編程你應(yīng)該了解的幾點建議

          C#異步編程看這篇就夠了


          瀏覽 47
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  美国av小说网站在线观看 | 成人高清无码视频在线免费观看 | 伊人高清无码在线视频s | 欧洲成人无码视频 | 欧美色图亚洲视频 |