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;
 }
相关推荐
郑州光合科技余经理38 分钟前
PHP构建:支撑欧美澳市场的同城生活服务平台开发
java·开发语言·数据库·uni-app·php·排序算法·生活
超级大只老咪8 小时前
数组相邻元素比较的循环条件(Java竞赛考点)
java
小浣熊熊熊熊熊熊熊丶8 小时前
《Effective Java》第25条:限制源文件为单个顶级类
java·开发语言·effective java
毕设源码-钟学长8 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
啃火龙果的兔子8 小时前
JDK 安装配置
java·开发语言
星哥说事8 小时前
应用程序监控:Java 与 Web 应用的实践
java·开发语言
派大鑫wink8 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
xUxIAOrUIII9 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home9 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法
等....9 小时前
Miniconda使用
开发语言·python