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

news2024/11/19 8:23:26

一、引用

image

二、代码

帮助类
/// <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;
      }
  }
调用
/// <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;
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1112556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KingBase服务器参数配置(Kylin)

主配置文件/KingbaseES/V8/data/kingbase.conf # 可通过find查找 [默认存储在database cluseter目录中] find / -name kingbase.conf辅助参数文件kingbase.auto.conf # 可通过find查找 [默认存储在database cluseter目录中] find / -name kingbase.auto.conf查看当前会话的参…

互联网Java工程师面试题·Java 总结篇·第十弹

目录 82、JDBC 能否处理 Blob 和 Clob&#xff1f; 83、简述正则表达式及其用途。 84、Java 中是如何支持正则表达式操作的&#xff1f; 85、获得一个类的类对象有哪些方式&#xff1f; 86、如何通过反射创建对象&#xff1f; 87、如何通过反射获取和设置对象私有字段的值…

python -pandas -处理excel合并单元格问题

对于合并的单元格&#xff0c;不进行处理情况下&#xff0c;会默认输出nan问题 解决方法&#xff1a; class A(object):def __init__(self, xlsx_file_path, sheet_index):self.xlsx_file FileDataProcesser.read_excel(xlsx_file_path, sheet_index)self.sheet_data self.…

优雅而高效的JavaScript——?? 运算符、?. 运算符和 ?. 运算符

&#x1f974;博主&#xff1a;小猫娃来啦 &#x1f974;文章核心&#xff1a;优雅而高效的JavaScript——?? 运算符、?. 运算符和 ?. 运算符 文章目录 引言空值处理的挑战解决方案1&#xff1a;?? 运算符基本用法与 || 运算符的区别实际应用场景举例 解决方案2&#xff…

leetCode 392. 判断子序列 动态规划 + 优化空间 / 双指针 等多种解法

392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c…

【2023】redis-stream配合spring的data-redis详细使用

目录 一、简介1、介绍2、对比二、整合spring的data-redis实现1、使用依赖2、配置类2.1、配置RedisTemplate bean2.2、异常类3、实体类3.1、User3.2、Book4、发送消息4.1、RedisStreamUtil工具类4.2、通过延时队列线程池模拟发送消息4.3、通过http主动发送消息5、&#x1f31f;消…

003数据安全传输-多端协议传输平台:Protobuf - 部署

文章目录 一、Windows环境二、Linux Centos环境三、protobuf测试3.1 新建.proto文件生成相应的类3.2 .proto生成相应的类的使用3.3 配置VS3.4 test代码 一、Windows环境 在windows下配置&#xff0c;无论protobuf是什么版本&#xff0c;IDE和编译器的版本都要保持一致。 比如…

Linux - 大括号的妙用

示例1 touch demo_{1..10}.txt示例2 touch case_{a,b,c,d}.txt示例3 touch {a,b}{1..4}.txt

第三章 内存管理 十一、虚拟内存的基本概念

目录 一、传统存储管理 1、缺点 二、局部性原理 1、时间局部性&#xff1a; 2、空间局部性&#xff1a; 三、虚拟内存的定义和特征 1、结构 ​编辑 2、定义 3、特征 &#xff08;1&#xff09;多次性: &#xff08;2&#xff09;对换性: &#xff08;3&#xff09;…

【来点小剧场--项目测试报告】个人博客系统测试报告

一、项目背景 个人博客系统采用前后端分离的方法来实现&#xff0c;使用了MySQL数据库来存储相关的数据&#xff0c;同时对Redis进行配置&#xff0c;将session会话存储在redis中以方便分布式运转&#xff0c;最后通过云服务器将项目部署到网络上。前端主要有六个页面构成&…

Vue3 + Nodejs 实战 ,文件上传项目--大文件分片上传+断点续传

目录 1.大文件上传的场景 2.前端实现 2.1 对文件进行分片 2.2 生成hash值&#xff08;唯一标识&#xff09; 2.3 发送上传文件请求 3.后端实现 3.1 接收分片数据临时存储 3.2 合并分片 4.完成段点续传 4.1修改后端 4.2 修改前端 5.测试 博客主页&#xff1a;専心_前端…

[牛客]计算机网络习题笔记_1019

1、物理层&#xff1a;以太网 调制解调器 电力线通信(PLC) SONET/SDH G.709 光导纤维 同轴电缆 双绞线等。 2、数据链路层&#xff08;网络接口层包括物理层和数据链路层&#xff09;&#xff1a;Wi-Fi(IEEE 802.11) WiMAX(IEEE 802.16) ATM DTM 令牌环 以太网 FDD…

高校教务系统登录页面JS分析——华东交通大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密码加…

android studio打开flutter项目报红

一、android studio打开flutter项目报红&#xff0c;如下图&#xff1a; 二、解决方法&#xff1a; 2.1 在这个build.gradle添加以下代码&#xff0c;如图&#xff1a; 2.2 在build.gradle最顶部添加如下代码&#xff1a; def localProperties new Properties() def localPr…

水经注地图服务 5.0.1-rc 版发布

《水经注地图服务》&#xff08;WeServer&#xff09;是一款可快速发布全国乃至全球海量卫星影像的地图发布服务产品。 它可以轻松发布260TB级海量卫星影像&#xff0c;从而使“在内网建立一个离线版的地球”不只是一个梦想&#xff01; ​01 新版发布 水经注地图服务 5.0…

NodeMCU ESP8266 读取按键外部输入信号详解(图文并茂)

NodeMCU ESP8266 读取按键外部输入信号教程&#xff08;图文并茂&#xff09; 文章目录 NodeMCU ESP8266 读取按键外部输入信号教程&#xff08;图文并茂&#xff09;前言按键输入常用接口pinModedigitalRead 示例代码结论 前言 ESP8266如何检测外部信号的输入&#xff0c;通常…

10kV-35kV交联电缆油杯终端

武汉凯迪正大油杯产品简介 KDZD-10 /KDZD-35 油杯终端是我公司在总结了大量的现场经验的基础上&#xff0c;自行开发、设计的一种 10~35kV 以下交联电缆和工频耐压试验的简易试验终端&#xff0c;该油杯操作简便&#xff0c;使用可靠。 目前电缆厂均拥有多条 XLPE 生产线&…

【Git】升级MacOS系统,git命令无法使用

终端执行git命令报错 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun安装这个东东&#xff0c;&#xff1f;需要42小时 最终解决&#xff1a; 下载安装 https…

C语言进阶第七课-----------自定义类型的讲解(结构体枚举联合)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

2023CRM排行:深度对比16款CRM

客户关系管理系统&#xff08;CRM&#xff09;作为数字化转型的重要载体&#xff0c;选择一个优秀的CRM系统将为企业未来健康增长保障。市场上CRM软件众多&#xff0c;但很难分清哪个适合自己&#xff0c;最近赶在公司选型&#xff0c;我对市场所有软件进行了一个调研&#xff…