ZXing.Net 的Core平台生成二维码

一、引用

二、代码

帮助类
C# 复制代码
/// <summary>
  /// ZXing.NET 二维码帮助类
  /// </summary>
  public class ZXingHelper
  {
      /// <summary>
      /// 站点二维码的目录
      /// </summary>
      private static string QRCodeDirectory = "QRCode";

      /// <summary>
      /// 使用zxing动态库生成二维码
      /// </summary>
      /// <param name="conetnt">二维码内容</param>
      /// <param name="logoPath">logo图片路径,默认为空。为空时生成的二维码不带logo</param>
      /// <param name="height">二维码图片高度,默认240 单位 pixels</param>
      /// <param name="width">二维码图片宽度,默认240 单位 pixels</param>
      /// <param name="margin">二维码图片边距,默认为0</param>
      /// <returns></returns>
      public static System.DrawingCore.Bitmap GenerateQRCode(string conetnt, string logoPath = "", int height = 240, int width = 240, int margin = 0)
      {
          try
          {
              BarcodeWriter barCodeWriter = new BarcodeWriter();
              barCodeWriter.Format = BarcodeFormat.QR_CODE;
              barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
              barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
              barCodeWriter.Options.Height = height;
              barCodeWriter.Options.Width = width;
              barCodeWriter.Options.Margin = margin;
              BitMatrix bm = barCodeWriter.Encode(conetnt);
              System.DrawingCore.Bitmap qrCodeImage = barCodeWriter.Write(bm);

              if (!string.IsNullOrEmpty(logoPath))
              {
                  // 添加Logo
                  System.DrawingCore.Bitmap logo = new System.DrawingCore.Bitmap(logoPath);
                  int logoSize = (int)(qrCodeImage.Width * 0.2); // Logo大小为二维码大小的1/5
                  int logoX = (qrCodeImage.Width - logoSize) / 2;
                  int logoY = (qrCodeImage.Height - logoSize) / 2;

                  System.DrawingCore.Graphics qrGraphics = System.DrawingCore.Graphics.FromImage(qrCodeImage);
                  qrGraphics.DrawImage(logo, new System.DrawingCore.Rectangle(logoX, logoY, logoSize, logoSize));
              }
              return qrCodeImage;
          }
          catch (Exception ex)
          {
              return null;
          }
      }

      /// <summary>
      ///生成二维码
      /// </summary>
      /// <param name="message"></param>
      /// <param name="width"></param>
      /// <param name="height"></param>
      /// <returns></returns>
      public static byte[] Create(string message, int width = 600, int height = 600)
      {
          try
          {
              int heig = width;
              if (width > height)
              {
                  heig = height;
                  width = height;
              }
              if (string.IsNullOrWhiteSpace(message))
              {
                  return null;
              }
              var w = new QRCodeWriter();
              BitMatrix b = w.encode(message, BarcodeFormat.QR_CODE, width, heig);
              var zzb = new BarcodeWriter();
              zzb.Options = new EncodingOptions()
              {
                  Margin = 0,
              };
              var  b2 = zzb.Write(b);
              byte[] bytes = BitmapToArray(b2);
              return bytes;
          }
          catch (Exception ex)
          {
              return null;
          }

      }

      /// <summary>
      /// 将Bitmap  写为byte[]的方法
      /// </summary>
      /// <param name="bmp"></param>
      /// <returns></returns>
      public static byte[] BitmapToArray(System.DrawingCore.Bitmap bmp)
      {
          byte[] byteArray = null;
          using (MemoryStream stream = new MemoryStream())
          {
              bmp.Save(stream, ImageFormat.Png);
              byteArray = stream.GetBuffer();
          }
          return byteArray;
      }
  }
调用
C# 复制代码
/// <summary>
 /// 获取二维码
 /// </summary>
 /// <param name="qrUrl"></param>
 /// <returns></returns>
 public byte[] GetQrCode(string qrUrl)
 {
     System.DrawingCore.Bitmap qrImage = null;
     if (!System.IO.File.Exists(QRCodeLogoPath))
     {
         qrImage = ZXingHelper.GenerateQRCode(qrUrl);
     }
     else
     {
         qrImage = ZXingHelper.GenerateQRCode(qrUrl, QRCodeLogoPath);
     }

     MemoryStream ms = new MemoryStream();
     qrImage.Save(ms, System.DrawingCore.Imaging.ImageFormat.Bmp);
     byte[] bytes = ms.GetBuffer();
     ms.Close();
     //return ZXingHelper.Create(qrUrl);
     return bytes;
 }
相关推荐
江沉晚呤时4 分钟前
C# 运行时类型创建:深入探索动态类型生成技术
开发语言·c#
月落归舟14 分钟前
深入剖析乐观锁背后的原理
java·乐观锁
唐青枫20 分钟前
别再把 Redis 当黑盒了!C#.NET IDistributedCache 详解:官方分布式缓存接口从入门到实战
c#·.net
SimonKing27 分钟前
OpenCode 在 IDEA 中使用 ACP 协议 VS 直接使用 TUI,哪个编程方式更是你的菜?
java·后端·程序员
NE_STOP35 分钟前
Redis--持久化之AOF
java
budingxiaomoli36 分钟前
注册中心的其他实现-Nacos
java·spring cloud·微服务
大大大大晴天️1 小时前
Flink技术实践-Flink重启策略选型指南
java·大数据·flink
szial1 小时前
Python Click 教程:从函数到专业命令行工具
开发语言·python
Karle_1 小时前
为AI编辑器准备c++编译环境,onnxruntime、cmake、cl,网上坑太多备份记录后续方便使用。
开发语言·c++·编辑器
Dxy12393102161 小时前
JavaScript 字符串转数值(小数)
开发语言·javascript·ecmascript