C#生成二維碼的兩種方式(快看二維碼)


前言

最近在做項目的時候遇到一個需求是將文本內容生成二維碼圖片的,對於這個需求那就直接上手(兩種方法,我比較喜歡第二種方式,往上面也是有很多的方法。這里只作為個人紀錄)

方法一:ThoughtWorks.QRCode

還有解析,並且還能添加彩色的點,應該是基於Drawing的
效果圖

第一步: NeGet包引用ThoughtWorks.QRCode

using System;
using System.Drawing;
using System.Text;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeScale = 4;
            qrCodeEncoder.QRCodeVersion = 8;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            System.Drawing.Image image = qrCodeEncoder.Encode("http://weixin.qq.com/r/qzj377TEKulVrfCM9225", Encoding.UTF8);
            string filename = Guid.NewGuid() + ".jpg";
            string filepath =  filename;
            System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
            image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
            fs.Close();
            image.Dispose();

            //二維碼解碼
            var codeDecoder = CodeDecoder(filepath);

            Console.WriteLine($"二維碼內容:{codeDecoder}");
            Console.WriteLine("---");
            Console.Read();
        }

        /// <summary>
        /// 二維碼解碼
        /// </summary>
        /// <param name="filePath">圖片路徑</param>
        /// <returns></returns>
        public static string CodeDecoder(string filePath)
        {
            if (!System.IO.File.Exists(filePath))
                return null;
            Bitmap myBitmap = new Bitmap(Image.FromFile(filePath));
            QRCodeDecoder decoder = new QRCodeDecoder();
            string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap), Encoding.UTF8);
            return decodedString;
        }
    }
}


方法二:QRCoder

我喜歡這個方法,先上效果圖,這個可以自定義圖片,而且還有邊框,其他的方法暫時沒有研究

在這里插入圖片描述
第一步: NeGet包引用ThoughtWorks.QRCode

using System;
using System.Drawing;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            
            System.Drawing.Image image = code("http://weixin.qq.com/r/qzj377TEKulVrfCM9225", 5,10, "C:\\Users\\Pride\\Pictures\\myimage\\1.jpg", 15,1,true);
            string filename = Guid.NewGuid() + ".jpg";
            string filepath =  filename;
            System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
            image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
            fs.Close();
            image.Dispose();
            Console.WriteLine("OK");
            Console.Read();
        }

        /// <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;

        }
    }
}


你喜歡哪種方式呢?

The birth of life is a pleasant surprise.Life is you.
是驚喜,生活是你的點贊分享傳統美德
Date:2021-11-21 今晚打老虎!

我的公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM