QrCodeCommon.cs 4.21 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;
using ZXing.Common;
using ZXing.Rendering;

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)
        {
            return null;
        }

        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="content">二维码内容</param>
        /// <returns></returns>
        public static Bitmap CreateQRCodeImage(string content)
        {
            // var writer = new BarcodeWriter<Bitmap>
            // {
            //     Format = global::ZXing.BarcodeFormat.QR_CODE,
            //     Options = new EncodingOptions
            //     {
            //         Height = 200,
            //         Width = 200,
            //         Margin = 1
            //     },
            //     Renderer = new BitmapRenderer
            //     {
            //         Foreground = Color.Black,
            //         Background = Color.White
            //     }
            // };

            // return writer.Write(content);
            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 e.ToString();
            }
        }


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