C#实现二维码功能,winform 以及 asp.net均可以用

Posted 码蚁的堡垒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#实现二维码功能,winform 以及 asp.net均可以用相关的知识,希望对你有一定的参考价值。

二维码现在用途很多,怎么用C#编程生成呢?

准备 ThoughtWorks.QRCode.dll

需要 一个类 QRCode,这个类专门来生成二维码的

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ThoughtWorks.QRCode;
using ThoughtWorks.QRCode.Codec;

namespace QRCodePro
{
    public class QRCode
    {
        /// 生成二维码
        /// </summary>
        /// <param name="strData">要生成的文字或者数字</param>
        /// <param name="qrEncoding">三种尺寸:BYTE ,ALPHA_NUMERIC,NUMERIC</param>
        /// <param name="level">大小:L M Q H</param>
        /// <param name="version">版本:如 8</param>
        /// <param name="scale">比例:如 4</param>
        /// <returns></returns>
        public static Image CreateCode_Choose(string strData, string qrEncoding, string size, int version, int scale)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            string encoding = qrEncoding;
            switch (encoding)
            {
                case "Byte":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                    break;
                case "AlphaNumeric":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
                    break;
                case "Numeric":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
                    break;
                default:
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                    break;
            }

            qrCodeEncoder.QRCodeScale = scale;
            qrCodeEncoder.QRCodeVersion = version;
            switch (size)
            {
                case "L":
                    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
                    break;
                case "M":
                    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                    break;
                case "Q":
                    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
                    break;
                default:
                    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
                    break;
            }
            //文字生成图片
            Image image = qrCodeEncoder.Encode(strData);
            return image;
        }
    }
}

在vs中新建窗体,搭建窗体,如图所示:

在主窗体中需要的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QRCodePro
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            cboEncoding.Items.Add("Byte");
            cboEncoding.Items.Add("AlphaNumeric");
            cboEncoding.Items.Add("Numeric");
            cboEncoding.SelectedIndex = 0;
            //填充大小下拉框
            cboSize.Items.Add("M");
            cboSize.Items.Add("L");
            cboSize.Items.Add("Q");
            cboSize.Items.Add("H");
            cboSize.SelectedIndex = 0;
            //填充文本框
            txtVersion.Text = "8";
            txtScale.Text = "4";
        }

        private void btnCreateCode_Click(object sender, EventArgs e)
        {
            string content = txtContent.Text;
            int version = Convert.ToInt32(txtVersion.Text);
            int scale = Convert.ToInt32(txtScale.Text);
            string size = cboSize.SelectedItem.ToString();
            string encoding = cboEncoding.SelectedItem.ToString();
            //检查空值字符串
            if (content == null || content == "")
            {
                MessageBox.Show("请输入二维码信息,支持中文");
            }
            else
            {
                Image img = QRCode.CreateCode_Choose(content, encoding, size, version, scale);
                picCode.Image = img;
            }
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            txtContent.Text = "";
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (picCode.Image != null)
            {
                SaveImages(picCode);
            }
            else
            {
                MessageBox.Show("还没生成图像呢!");
            }
        }
        private void SaveImages(PictureBox pic)
        {
            string Parentpath = @"D:\\Photo";
            //自1970 年1月1日00:00:00 GMT以来的毫秒数
            string filename = DateTime.Now.Ticks.ToString();
            if (Parentpath.Substring(Parentpath.Length - 1, 1) != @"\\")
                Parentpath = Parentpath + @"\\";
            string childPath = Parentpath + DateTime.Now.ToString("yyyyMMdd");
            if (!Directory.Exists(childPath))
                Directory.CreateDirectory(childPath);
            pic.Image.Save(childPath + "\\\\" + filename + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            MessageBox.Show("保存成功!");
        }
    }
}

实现的效果

保持文件

 

要把此项目移植到asp.net网站上也是极其简单的,这里就不再演示了。

 

以上是关于C#实现二维码功能,winform 以及 asp.net均可以用的主要内容,如果未能解决你的问题,请参考以下文章

C#、 WINFORM以及 .NET之间关系。

在C#中如何实现winform窗体的全屏截图功能

c#中winform是用啥语言编写?

C# Winform DataGridView中实现二维表头

C# winform中如果实现播放视频功能

C# winform程序,怎么实现菜单的功能?