C# 生成讀取二維碼

先在Nuget中安裝這個動態庫

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;

namespace QRCode
{
    public class QRCodeHelper
    {

        public static string SaveFilePath = "";

        /// <summary>
        /// 生成二維碼(中間不帶LOGO)
        /// </summary>
        /// <param name="qrdata">要附加的內容</param>
        /// <returns></returns>
        public static void CreateQRCode(string qrdata)
        {
            try
            {
                QRCodeEncoder encoder = new QRCodeEncoder();
                encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//編碼方式(注意:BYTE能支持中文,ALPHA_NUMERIC掃描出來的都是數字)
                encoder.QRCodeScale = 4;//大小(值越大生成的二維碼圖片像素越高)
                encoder.QRCodeVersion = 0;//版本(注意:設置爲0主要是防止編碼的字符串太長時發生錯誤)
                encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;//錯誤效驗、錯誤更正(有4個等級)
                encoder.QRCodeBackgroundColor = Color.White;
                encoder.QRCodeForegroundColor = Color.Black;
                Image image = encoder.Encode(qrdata, Encoding.UTF8);
                image.Save(SaveFilePath, ImageFormat.Png);
                image.Dispose();

            }
            catch (Exception e)
            {
                //一些操作
            }
        }

        /// <summary>
        /// 生成二維碼(中間帶LOGO)
        /// </summary>
        /// <param name="qrdata">要附加的內容</param>
        ///<param name="AbsoluteLogo">保存的絕對路徑</param>
        /// <returns></returns>
        public static void CreateQRCode(string qrdata, string AbsoluteLogo)
        {
            try
            {
                QRCodeEncoder encoder = new QRCodeEncoder();
                encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//編碼方式(注意:BYTE能支持中文,ALPHA_NUMERIC掃描出來的都是數字)
                encoder.QRCodeScale = 4;//大小(值越大生成的二維碼圖片像素越高)
                encoder.QRCodeVersion = 0;//版本(注意:設置爲0主要是防止編碼的字符串太長時發生錯誤)
                encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;//錯誤效驗、錯誤更正(有4個等級)
                encoder.QRCodeBackgroundColor = Color.White;
                encoder.QRCodeForegroundColor = Color.Black;
                Image image = encoder.Encode(qrdata, Encoding.UTF8);
                Bitmap btm = new Bitmap(AbsoluteLogo);
                Bitmap copyImage = new Bitmap(btm, image.Width / 5, image.Height / 5);
                Graphics g = Graphics.FromImage(image);
                int x = image.Width / 2 - copyImage.Width / 2;
                int y = image.Height / 2 - copyImage.Height / 2;
                g.DrawImage(copyImage, x, y);
                image.Save(SaveFilePath, ImageFormat.Png);
                image.Dispose();
                btm.Dispose();
                copyImage.Dispose();
                g.Dispose();
            }
            catch (Exception e)
            {
                //一些操作
            }
        }

        /// <summary>
        /// 解析二維碼
        /// </summary>
        /// <param name="absoluteSave">二維碼的絕對路徑</param>
        /// <returns></returns>
        public static string DeCode(string AbsoluteQRCodePath)
        {
            string decodedString = new QRCodeDecoder().decode(new QRCodeBitmapImage(new Bitmap(AbsoluteQRCodePath)), Encoding.UTF8);
            return decodedString;
        }
    }
}


        /// <summary>
        /// 生成二維碼
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            #region 調用QRCode創建二維碼
            string fileN = Environment.CurrentDirectory + "\\Img\\123_New.png";
            if (File.Exists(fileN))
            {
                File.Delete(fileN);
            }
            QRCodeHelper.SaveFilePath = fileN;
            QRCodeHelper.CreateQRCode(this.textEdit1.Text.Trim());
            this.pictureEdit1.Image = Image.FromFile(fileN);
            #endregion
        }
        /// <summary>
        /// 讀取二維碼
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void simpleButton2_Click(object sender, EventArgs e)
        {
            string str = QRCodeHelper.DeCode(Environment.CurrentDirectory + "\\Img\\璇狼之風QRCODE.png");

            this.Text = "當前二維碼內容:" + str;
        }

        /// <summary>
        /// 帶Logo的QR
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void simpleButton3_Click(object sender, EventArgs e)
        {
            #region 調用QRCode創建二維碼 帶Logo

            string fileN = Environment.CurrentDirectory + "\\Img\\璇狼之風QRCODE.png";

            if (File.Exists(fileN))
            {
                File.Delete(fileN);
            }

            string filePic = Environment.CurrentDirectory + "\\Img\\璇狼之風.jpg";

            QRCodeHelper.SaveFilePath = fileN;

            QRCodeHelper.CreateQRCode(this.textEdit1.Text.Trim(), filePic);

            System.Drawing.Image img = System.Drawing.Image.FromFile(fileN);

            System.Drawing.Image bmp = new System.Drawing.Bitmap(img);

            this.pictureEdit1.Image = bmp;

            img.Dispose();

            #endregion
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章