首頁  >  文章  >  後端開發  >  最新使用C#產生二維碼方案,詳解及實例 ( QRCoder )

最新使用C#產生二維碼方案,詳解及實例 ( QRCoder )

php是最好的语言
php是最好的语言原創
2018-07-26 16:09:5414351瀏覽

不知道大家有製作多二維碼嗎?本篇文章我將跟大家介紹如何用C#產生二維碼,先說一下產生二維碼所需的三個類QRCodeGenerator、QRCodeData、QRCode。供後面好理解。他們的 職責 分別是什麼呢? QRCodeGenerator :用來透過指定的方式產生二維碼儲存的資料對象,也就是 QRCodeData 二維碼中間的 Matrix,之後 QRCode 得到 QRCodeData 並產生二維碼

二維碼

1.前言

最近在搞二維碼方面的一些東西,所以接觸了一些二維碼相關,那麼既然用過了就要有用過了的樣子

其實關於二維碼的文章真的多的數不勝數,有很多寫的很認真,很好,但這就像是學習一樣,別人會不代表自己就沒有學習和記錄的價值,所以說學習不在早晚

引入套件

1.透過NuGet引入QRCoder

a)首先,我們新建一個類別庫 項目,這裡命名為chestnut_qrcode

b)之後透過NuGet 引入QRCoder 套件

c)見圖運算

最新使用C#產生二維碼方案,詳解及實例 ( QRCoder )

最新使用C#產生二維碼方案,詳解及實例 ( QRCoder )

##d)安裝成功後,專案引用中就會出現
    QRCoder
  • 的引用

    e)這時候引入工作已經完成,不過可以順手建立一個
  • Encoder.cs
  • 靜態公共類別

  • 二維碼產生類別

    #1.前期準備
這裡先說一下產生二維碼所需的三個類別:

QRCodeGenerator

QRCodeDataQRCode

他們的

職責

分別是什麼呢?

QRCodeGenerator

:用來透過指定的方式產生二維碼儲存的資料對象,也就是

QRCodeData

二維碼中間的

Matrix

,之後

QRCode

得到

QRCodeData 並產生二維碼

2.編碼

最新使用C#產生二維碼方案,詳解及實例 ( QRCoder )##Encoder.cs

全部程式碼如下:

using System.Drawing;

namespace chestnut_qrcode
{
    /// <summary>
    /// 二维码编码器
    /// </summary>
    public static class Encoder
    {
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="msg">信息</param>
        /// <param name="version">版本 1 ~ 40</param>
        /// <param name="pixel">像素点大小</param>
        /// <param name="icon_path">图标路径</param>
        /// <param name="icon_size">图标尺寸</param>
        /// <param name="icon_border">图标边框厚度</param>
        /// <param name="white_edge">二维码白边</param>
        /// <returns>位图</returns>
        public static Bitmap code(string msg, int version, int pixel, string icon_path, int icon_size, int icon_border, bool white_edge)
        {

            QRCoder.QRCodeGenerator code_generator = new QRCoder.QRCodeGenerator();

            QRCoder.QRCodeData code_data = code_generator.CreateQrCode(msg, QRCoder.QRCodeGenerator.ECCLevel.M/* 这里设置容错率的一个级别 */, true, true, QRCoder.QRCodeGenerator.EciMode.Utf8, version);

            QRCoder.QRCode code = new QRCoder.QRCode(code_data);

            Bitmap icon = new Bitmap(icon_path);

            Bitmap bmp = code.GetGraphic(pixel, Color.Black, Color.White, icon, icon_size, icon_border, white_edge);

            return bmp;

        }
    }
}

容錯率與version 之間的參數都與編碼格式有關係,有些格式是不支援中文的哦

準備Form1.外觀

這裡seaconch使用的是

winform最新使用C#產生二維碼方案,詳解及實例 ( QRCoder ) 項目,直接截圖吧

2.程式碼

using System;
using System.Drawing;
using System.Windows.Forms;

namespace chestnut_form
{
    public partial class frm_qrcode : Form
    {
        public frm_qrcode()
        {
            InitializeComponent();
        }

        // 窗体加载
        private void frm_qrcode_Load(object sender, EventArgs e)
        {
            cb_version.SelectedIndex = 1;

            cb_pixel.SelectedIndex = 0;

            cb_icon_size.SelectedIndex = 0;

            cb_icon_border.SelectedIndex = 1;
        }

        // 编码
        private void btn_encode_Click(object sender, EventArgs e)
        {
            int version = Convert.ToInt16(cb_version.Text);

            int pixel = Convert.ToInt16(cb_pixel.Text);

            string str_msg = tb_msg.Text;

            int int_icon_size = Convert.ToInt16(cb_icon_size.Text);

            int int_icon_border = Convert.ToInt16(cb_icon_border.Text);

            bool b_we = rb_we_y.Checked ? true : false;

            Bitmap bmp = chestnut_qrcode.Encoder.code(str_msg, version, pixel, "E:/seaconch/git/1.jpg", int_icon_size, int_icon_border, b_we);

            pb_qrcode.Image = bmp;
        }

        // 保存
        private void btn_save_Click(object sender, EventArgs e)
        {
            if (pb_qrcode.Image != null)

                using (SaveFileDialog sfd = new SaveFileDialog())
                {
                    sfd.Filter = "(*.png)|*.png|(*.bmp)|*.bmp";

                    if (sfd.ShowDialog() == DialogResult.OK) pb_qrcode.Image.Save(sfd.FileName);

                }
        }
    }
}

#看下C#二維碼產生效果

##########相關文章:#########【c#教學】C# 數據類型#########相關影片:#########極客學院C#影片教學######

以上是最新使用C#產生二維碼方案,詳解及實例 ( QRCoder )的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn