QrCodeCommon.cs 4.23 KB
using QRCoder;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ZXing;

namespace NCC.Code.QrCode
{
    /// <summary>
    /// 二维码类
    /// </summary>
    public static class QrCodeCommon
    {
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="plainText"></param>
        /// <param name="pixel">像素大小</param>
        /// <returns></returns>
        public static Bitmap GetQRCode(string plainText, int pixel)
        {
            //var generator = new QRCodeGenerator();
            //var qrCodeData = generator.CreateQrCode(plainText, QRCodeGenerator.ECCLevel.Q);
            //var qrCode = new QRCoder.QRCode(qrCodeData);
            //var bitmap = qrCode.GetGraphic(pixel);
            //return bitmap;
            return null;
        }

        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="content">二维码内容</param>
        /// <returns></returns>
        public static Bitmap CreateQRCodeImage(string content)
        {
            //QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();
            //QRCodeData qrCodeData = qrGenerator.CreateQrCode(content, QRCodeGenerator.ECCLevel.Q);
            //QRCode qrcode = new QRCode(qrCodeData);
            //Bitmap qrCodeImage = qrcode.GetGraphic(20, Color.Black, Color.White, null, 15, 1, false);
            //return qrCodeImage;
            return null;
        }
        /// <summary>
        /// 读取二维码(ThoughtWorks)
        /// </summary>
        /// <param name="map"></param>
        /// <returns></returns>
        public static string ReadQRCodeImage(Bitmap map)
        {
            try
            {
                QRCodeDecoder qrDecoder = new QRCodeDecoder();
                string content = qrDecoder.decode(new QRCodeBitmapImage(map), Encoding.UTF8);
                return content;
            }
            catch (Exception e)
            {
                return "";
            }

        }

        /// <summary>
        /// 添加二维码并保存到文件夹
        /// </summary>
        /// <param name="content">二维码内容</param>
        /// <param name="dir">子文件夹</param>
        /// <returns></returns>
        public static string AddQRCodeSaveToFile(string content, string dir)
        {
            string fileName = Guid.NewGuid().ToString() + ".jpg";
            string filePath = AppDomain.CurrentDomain.BaseDirectory.ToString() + @"resource\image\qr\" + dir;
            try
            {
                Bitmap qrCodeImage = CreateQRCodeImage(content);
                if (!Directory.Exists(filePath))
                {
                    Directory.CreateDirectory(filePath);
                }
                qrCodeImage.Save(filePath + @"\" + fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                qrCodeImage.Dispose();
                return "/resource/image/qr/" + dir + "/" + fileName;
            }
            catch (Exception e)
            {
                return "";
            }
        }


        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="plainText">内容</param>
        /// <param name="pixel">像素大小 默认5 可自行调整</param>
        /// <returns></returns>
        public static Bitmap ToQrCode(this string plainText, int pixel = 5)
        {
            return GetQRCode(plainText, pixel);
        }
         

        /// <summary>
        /// 生成二维码 Base64
        /// </summary>
        /// <param name="plainText">内容</param>
        /// <param name="pixel">像素大小 默认5 可自行调整</param>
        /// <param name="hasprev">包含data:image... 前缀 默认false</param>
        /// <returns></returns>
        public static string ToQrCodeBase64(this string plainText, int pixel = 5, bool hasprev = false)
        {
            string base64 = "";
            if (hasprev)
            {
                base64 = "data:image/png;base64,";
            }
            base64 += FileHelper.BitmapToBase64(GetQRCode(plainText, pixel));
            return base64;
        }
    }
}