zoukankan      html  css  js  c++  java
  • C# 利用QRCode生成二维码图片

    网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快。但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴。这是本要用它做了一个项目后,简单的整理了一下。

    组件下载地址:http://download.csdn.net/detail/lybwwp/6861821

    下载文件包包含ThoughtWorks.QRCode.dll与dll的源码,强人可修改些源码。

    字符串较长的情况下,用ThoughtWorks.QRCode生成二维码时出现“索引超出了数组界限”的错误。
    解决方法:将 QRCodeVersion 改为0。

    此代码功能:批量生成二维码图片保存到指定文件夹中(此图片可保存,可指定图片格式和图片大小)。

    引用空间 ThoughtWorks.QRCode.dll

    using ThoughtWorks.QRCode.Codec;

    [csharp] view plain copy
     
     print?
      1. #region 二维码生成  
      2.         /// <summary>  
      3.         /// 批量生成二维码图片  
      4.         /// </summary>  
      5.         private void Create_CodeImages()  
      6.         {  
      7.             try  
      8.             {  
      9.                 if (myDataSet != null)  
      10.                 {  
      11.                     if (myDataSet.Tables[0].Rows.Count > 0)  
      12.                     {  
      13.                         //清空目录  
      14.                         DeleteDir(currentPath);  
      15.                         foreach (DataRow dr in myDataSet.Tables[0].Rows)  
      16.                         {  
      17.                             if (dr[2] != null)  
      18.                             {  
      19.                                 //生成图片  
      20.                                 Bitmap image = Create_ImgCode(dr[2].ToString(), imgSize);  
      21.                                 //保存图片  
      22.                                 SaveImg(currentPath, image);  
      23.                             }  
      24.                         }  
      25.                         //打开文件夹  
      26.                         Open_File(currentPath);  
      27.                         myDataSet = null;  
      28.                         return;  
      29.                     }  
      30.                 }  
      31.             }  
      32.             catch(Exception ex) {  
      33.                 MessageBox.Show(ex.ToString (), "错误!", MessageBoxButtons.OK, MessageBoxIcon.Error);  
      34.               
      35.             }  
      36.         }  
      37.   
      38.   
      39.         //程序路径  
      40.         readonly string currentPath = Application.StartupPath + @"BarCode_Images";  
      41.   
      42.         /// <summary>  
      43.         /// 保存图片  
      44.         /// </summary>  
      45.         /// <param name="strPath">保存路径</param>  
      46.         /// <param name="img">图片</param>  
      47.         public void SaveImg(string strPath, Bitmap img)  
      48.         {  
      49.             //保存图片到目录  
      50.             if (Directory.Exists(strPath))  
      51.             {  
      52.                 //文件名称  
      53.                 string guid = Guid.NewGuid().ToString().Replace("-", "") + ".png";  
      54.                 img.Save(strPath + "/" + guid, System.Drawing.Imaging.ImageFormat.Png);  
      55.             }  
      56.             else  
      57.             {  
      58.                 //当前目录不存在,则创建  
      59.                 Directory.CreateDirectory(strPath);  
      60.             }  
      61.         }  
      62.         /// <summary>  
      63.         /// 生成二维码图片  
      64.         /// </summary>  
      65.         /// <param name="codeNumber">要生成二维码的字符串</param>       
      66.         /// <param name="size">大小尺寸</param>  
      67.         /// <returns>二维码图片</returns>  
      68.         public Bitmap Create_ImgCode(string codeNumber, int size)  
      69.         {  
      70.             //创建二维码生成类  
      71.             QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();  
      72.             //设置编码模式  
      73.             qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;  
      74.             //设置编码测量度  
      75.             qrCodeEncoder.QRCodeScale = size;  
      76.             //设置编码版本  
      77.             qrCodeEncoder.QRCodeVersion = 0;  
      78.             //设置编码错误纠正  
      79.             qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;  
      80.             //生成二维码图片  
      81.             System.Drawing.Bitmap image = qrCodeEncoder.Encode(codeNumber);  
      82.             return image;  
      83.         }  
      84.         /// <summary>  
      85.         /// /打开指定目录  
      86.         /// </summary>  
      87.         /// <param name="path"></param>  
      88.         public void Open_File(string path)  
      89.         {  
      90.             System.Diagnostics.Process.Start("explorer.exe", path);  
      91.         }  
      92.         /// <summary>  
      93.         /// 删除目录下所有文件  
      94.         /// </summary>  
      95.         /// <param name="aimPath">路径</param>  
      96.         public void DeleteDir(string aimPath)  
      97.         {  
      98.             try  
      99.             {  
      100.                 //目录是否存在  
      101.                 if (Directory.Exists(aimPath))  
      102.                 {  
      103.                     // 检查目标目录是否以目录分割字符结束如果不是则添加之  
      104.                     if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)  
      105.                         aimPath += Path.DirectorySeparatorChar;  
      106.                     // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组  
      107.                     // 如果你指向Delete目标文件下面的文件而不包含目录请使用下面的方法  
      108.                     string[] fileList = Directory.GetFiles(aimPath);  
      109.                     //string[] fileList = Directory.GetFileSystemEntries(aimPath);  
      110.                     // 遍历所有的文件和目录  
      111.                     foreach (string file in fileList)  
      112.                     {  
      113.                         // 先当作目录处理如果存在这个目录就递归Delete该目录下面的文件  
      114.                         if (Directory.Exists(file))  
      115.                         {  
      116.                             DeleteDir(aimPath + Path.GetFileName(file));  
      117.                         }  
      118.                         // 否则直接Delete文件  
      119.                         else  
      120.                         {  
      121.                             File.Delete(aimPath + Path.GetFileName(file));  
      122.                         }  
      123.                     }  
      124.                 }  
      125.             }  
      126.             catch (Exception e)  
      127.             {  
      128.                 throw e;  
      129.             }  
      130.         }  
      131.         #endregion  
  • 相关阅读:
    linux命令大全
    【转载】nginx的五种负载算法
    nginx服务器安装及配置文件详解
    查看linux系统核数
    利用nginx实现分流
    ntohs, ntohl, htons,htonl的比较和详解
    Nginx反向代理之HTTP 请求头中的 X-Forwarded-For
    javascript中 for in 、for 、forEach 、for of 、Object.keys().
    vue里面路由传参的三种方式
    vue中ref在input中详解
  • 原文地址:https://www.cnblogs.com/soundcode/p/7489859.html
Copyright © 2011-2022 走看看