C#生成二维码的两种方式

前言

最近在做项目的时候遇到一个需求是将文本内容生成二维码图片的,对于这个需求那就直接上手(两种方法,我比较喜欢第二种方式,往上面也是有很多的方法。这里只作为个人纪录)

方法一:ThoughtWorks.QRCode

还有解析,并且还能添加彩色的点,应该是基于Drawing的
C#生成二维码的两种方式_第1张图片

第一步: 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();
        }

        /// 
        /// 二维码解码
        /// 
        /// 图片路径
        /// 
        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

我喜欢这个方法,先上效果图,这个可以自定义图片,而且还有边框,其他的方法暂时没有研究

C#生成二维码的两种方式_第2张图片
第一步: NeGet包引用QRCoder

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

          public class QRCodeHelper
    {
        //todo 1.保存为二维码
        //2.上传七牛云

        public static QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();

        /// 
        /// 生成二维码
        /// 
        /// 生成的内容
        /// 
        public static async Task GetQRCode(string link)
        {
            string guid = Guid.NewGuid().ToString().Replace("-", "") + ".png";    //图片名称
            QRCodeData qrCodeData = qrGenerator.CreateQrCode(link, QRCodeGenerator.ECCLevel.Q);
            QRCode qrcode = new QRCode(qrCodeData);
            Bitmap qrCodeImage = qrcode.GetGraphic(5, System.Drawing.Color.Black, System.Drawing.Color.White, null, 15, 3);
            string filePath = Path.Combine("qrcodetest", guid); //图片保存地址
            //获取文件对象
            FileInfo file = new FileInfo(filePath);
            //判断文件夹是否创建
            if (!file.Directory.Exists) { file.Directory.Create(); }
            qrCodeImage.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
           
            return filePath;

            /* GetGraphic方法参数说明
                 public Bitmap GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, Bitmap icon = null, int iconSizePercent = 15, int iconBorderWidth = 6, bool drawQuietZones = true)
                 int pixelsPerModule:生成二维码图片的像素大小 ,我这里设置的是5
                 Color darkColor:暗色   一般设置为Color.Black 黑色
                 Color lightColor:亮色   一般设置为Color.White  白色
                 Bitmap icon :二维码 水印图标 例如:Bitmap icon = new Bitmap(context.Server.MapPath("~/images/zs.png")); 默认为NULL ,加上这个二维码中间会显示一个图标
                 int iconSizePercent: 水印图标的大小比例 ,可根据自己的喜好设置
                 int iconBorderWidth: 水印图标的边框
                 bool drawQuietZones:静止区,位于二维码某一边的空白边界,用来阻止读者获取与正在浏览的二维码无关的信息 即是否绘画二维码的空白边框区域 默认为true
           */
        }
    }

C#生成二维码的两种方式_第3张图片
你喜欢哪种方式呢?

The birth of life is a pleasant surprise.Life is you.
是惊喜,生活是你的点赞分享传统美德
Date:2021-11-21 今晚打老虎

你可能感兴趣的:(C#方法,c#)