C#如何用ThoughtWorks生成二维码

作者:彭泽0902 时间:2022-09-28 20:44:53 

       在现在的项目中,较多的使用到二维码,前面介绍过一篇使用Gma生成二维码的操作,现在介绍一个第三方组件,主要介绍生成二维码,二维码的解析,以及对二维码的相关信息的选择,现在介绍ThoughtWorks用于生成二维码,本随笔采用.net4.5和C#6.0语法,也可以进行查看ThoughtWorks的底层源码。

1.生成二维码:


   /// <summary>
   /// 生成二维码
   /// </summary>
   /// <param name="content">带生成二维码的字符串</param>
   /// <param name="path">路径</param>
   /// <returns></returns>
   public static string CreatehoughtWorksQrCode(string content, string path)
   {
     if (string.IsNullOrEmpty(content))
     {
       throw new ArgumentNullException(content);
     }
     if (string.IsNullOrEmpty(path))
     {
       throw new ArgumentNullException(path);
     }
     var qrCodeEncoder = new QRCodeEncoder
     {
       QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,
       QRCodeScale = 4,
       QRCodeVersion = 8,
       QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M
     };
     Image image = qrCodeEncoder.Encode(content);
     var filename = DateTime.Now.ToString("yyyymmddhhmmssfff") + ".jpg";
     var filepath = string.Format("{0}{1}", path, filename);
     FileStream fs = null;
     try
     {
       fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
       image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
     }
     catch (IOException ex)
     {
       throw new IOException(ex.Message);
     }
     finally
     {
       if (fs != null) fs.Close();
       image.Dispose();
     }
     return CodeDecoder(filepath);
   }

2.解析二维码:


   /// <summary>
   /// 二维码解码
   /// </summary>
   /// <param name="filePath">图片路径</param>
   /// <returns></returns>
   public static string CodeDecoder(string filePath)
   {
     if (string.IsNullOrEmpty(filePath))
     {
       throw new ArgumentNullException(filePath);
     }
     try
     {
       if (!System.IO.File.Exists(filePath))
         return null;
       var myBitmap = new Bitmap(Image.FromFile(filePath));
       var decoder = new QRCodeDecoder();
       var decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap));
       return decodedString;
     }
     catch (Exception ex)
     {
       throw new Exception(ex.Message);
     }
   }

3.选择生成的二维码参数:


   /// <summary>
   /// 选择生成二维码的相关类型
   /// <param name="strData">要生成的文字或者数字,支持中文。如: "4408810820 深圳-广州" 或者:4444444444</param>
   /// <param name="qrEncoding">三种尺寸:BYTE ,ALPHA_NUMERIC,NUMERIC</param>
   /// <param name="level">大小:L M Q H</param>
   /// <param name="version">版本:如 8</param>
   /// <param name="scale">比例:如 4</param>
   /// <returns></returns>
   /// </summary>
   public void CreateCode_Choose(string strData, string qrEncoding, string level, int version, int scale)
   {
     var qrCodeEncoder = new QRCodeEncoder();
     var encoding = qrEncoding;
     switch (encoding)
     {
       case "Byte":
         qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
         break;
       case "AlphaNumeric":
         qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
         break;
       case "Numeric":
         qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
         break;
       default:
         qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
         break;
     }

qrCodeEncoder.QRCodeScale = scale;
     qrCodeEncoder.QRCodeVersion = version;
     switch (level)
     {
       case "L":
         qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
         break;
       case "M":
         qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
         break;
       case "Q":
         qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
         break;
       default:
         qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
         break;
     }
     Image image = null;
     FileStream fs = null;
     try
     {
       //文字生成图片
       image = qrCodeEncoder.Encode(strData);
       var filename = DateTime.Now.ToString("yyyymmddhhmmssfff") + ".jpg";
       var filepath = HttpContext.Current.Server.MapPath(@"~\Upload") + "\\" + filename;
       fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
       image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
     }
     catch (IOException ex)
     {
       throw new IOException(ex.Message);
     }
     finally
     {
       if (fs != null) fs.Close();
       if (image != null) image.Dispose();
     }
   }

来源:https://cloud.tencent.com/developer/article/1013158

标签:c#,ThoughtWorks,二维码
0
投稿

猜你喜欢

  • Spring boot集成Kafka消息中间件代码实例

    2022-11-06 21:53:48
  • springboot+jwt+springSecurity微信小程序授权登录问题

    2022-10-13 03:36:22
  • 深入解析Java的设计模式编程中建造者模式的运用

    2022-08-10 23:31:22
  • Java面试题冲刺第十六天--消息队列

    2022-08-08 09:07:04
  • unity实现虚拟摇杆控制Virtual Joystick

    2022-09-26 11:56:28
  • Java IO流—异常及捕获异常处理 try…catch…finally

    2023-03-14 07:35:52
  • 浅谈virtual、abstract方法和静态方法、静态变量理解

    2022-08-29 02:29:14
  • Spring Boot整合Web项目常用功能详解

    2023-06-04 17:14:21
  • 基于Mock测试Spring MVC接口过程解析

    2023-11-27 12:04:30
  • java中map和对象互转工具类的实现示例

    2023-06-05 11:08:30
  • C# 获取系统进程的用户名

    2022-12-06 02:38:03
  • 详解Jackson 使用以及性能介绍

    2023-02-21 00:08:31
  • java模拟http的Get/Post请求,并设置ip与port代理的方法

    2021-11-25 11:30:57
  • 浅谈Java解释器模式

    2021-08-23 23:45:59
  • Java Scala实现数据库增删查改操作详解

    2022-02-03 05:09:22
  • spring boot实战之本地jar包引用示例

    2021-11-01 20:44:45
  • 详解Spring Boot Profiles 配置和使用

    2021-10-05 22:54:57
  • SpringBoot之如何指定配置文件启动

    2023-11-17 15:17:48
  • 50 道Java 线程面试题(经典)

    2023-11-23 19:47:37
  • SpringBoot实现启动项目后立即执行的方法总结

    2022-07-31 15:01:16
  • asp之家 软件编程 m.aspxhome.com