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

一、引用

ZXing.Net 的Core平台生成二维码_第1张图片

二、代码

帮助类
/// 
  /// ZXing.NET 二维码帮助类
  /// 
  public class ZXingHelper
  {
      /// 
      /// 站点二维码的目录
      /// 
      private static string QRCodeDirectory = "QRCode";

      /// 
      /// 使用zxing动态库生成二维码
      /// 
      /// 二维码内容
      /// logo图片路径,默认为空。为空时生成的二维码不带logo
      /// 二维码图片高度,默认240 单位 pixels
      /// 二维码图片宽度,默认240 单位 pixels
      /// 二维码图片边距,默认为0
      /// 
      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;
          }
      }

      /// 
      ///生成二维码
      /// 
      /// 
      /// 
      /// 
      /// 
      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;
          }

      }

      /// 
      /// 将Bitmap  写为byte[]的方法
      /// 
      /// 
      /// 
      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;
      }
  }
调用
/// 
 /// 获取二维码
 /// 
 /// 
 /// 
 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;
 }

你可能感兴趣的:(.net,java,开发语言)