Board logo

标题: [C#] 详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式) [打印本页]

作者: shillan    时间: 2018-6-11 14:29     标题: 详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)

最近做项目遇到生成二维码的问题,发现网上用的最多的是ThoughtWorks.QRCode和QrCode.Net两种方式。访问官网看着例子写了两个Demo,使用过程中发现两个都挺好用的,ThoughtWorks.QRCode的功能更多一些,但是dll文件有6兆,QrCode.Net只有400多K,大家根据自己的需要选择吧。附上代码仅供参考。
并且提供VS2013写的一个Demo提供给大家免费下载。如有疑问欢迎交流。

ThoughtWorks.QRCode:
  1. private void CreateQrcode(string nr)

  2.     {

  3.       Bitmap bt;

  4.       string enCodeString = nr;

  5.       QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

  6.       bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);

  7.       string filename = DateTime.Now.ToString("yyyymmddhhmmss");

  8.       string path = Server.MapPath("~/image/") + filename + ".jpg";

  9.       Response.Write(path);

  10.       bt.Save(path);

  11.       this.Image1.ImageUrl = "~/image/" + filename + ".jpg";

  12.     }
复制代码
QrCode.Net:
  1. protected void Button1_Click(object sender, EventArgs e)

  2.     {

  3.       using (var ms = new MemoryStream())

  4.       {
  5.         string stringtest = "中国inghttp://www.baidu.com/mvc.test?&";

  6.         GetQRCode(stringtest, ms);

  7.         Response.ContentType = "image/Png";

  8.         Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);

  9.         Image img = Image.FromStream(ms);

  10.         string filename = DateTime.Now.ToString("yyyymmddhhmmss");

  11.         string path = Server.MapPath("~/image/") + filename + ".png";

  12.         img.Save(path);

  13.         Response.End();

  14.       }
  15.     }
复制代码
  1. /// <summary>

  2. /// 获取二维码

  3. /// </summary>

  4. /// <param name="strContent">待编码的字符</param>

  5. /// <param name="ms">输出流</param>

  6. ///<returns>True if the encoding succeeded, false if the content is empty or too large to fit in a QR code</returns>

  7. public static bool GetQRCode(string strContent, MemoryStream ms)

  8. {

  9.   ErrorCorrectionLevel Ecl = ErrorCorrectionLevel.M; //误差校正水平

  10.   string Content = strContent;//待编码内容

  11.   QuietZoneModules QuietZones = QuietZoneModules.Two; //空白区域

  12.   int ModuleSize = 12;//大小

  13.   var encoder = new QrEncoder(Ecl);

  14.   QrCode qr;

  15.   if (encoder.TryEncode(Content, out qr))//对内容进行编码,并保存生成的矩阵

  16.   {

  17.     var render = new GraphicsRenderer(new FixedModuleSize(ModuleSize, QuietZones));

  18.     render.WriteToStream(qr.Matrix, ImageFormat.Png, ms);

  19.   }

  20.   else

  21.   {

  22.     return false;

  23.   }

  24.   return true;

  25. }
复制代码
下面是下载地址:demo
作者: shillan    时间: 2018-6-11 14:32     标题: .NET 二维码生成(ThoughtWorks.QRCode)

引用ThoughtWorks.QRCode.dll (源代码里有)

1、简单二维码生成及解码代码:
//生成二维码方法一
  1.         private void CreateCode_Simple(string nr)
  2.         {
  3.             QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  4.             qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
  5.             qrCodeEncoder.QRCodeScale = 4;
  6.             qrCodeEncoder.QRCodeVersion = 8;
  7.             qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  8.             //System.Drawing.Image image = qrCodeEncoder.Encode("4408810820 深圳-广州 小江");
  9.             System.Drawing.Image image = qrCodeEncoder.Encode(nr);
  10.             string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg";
  11.             string filepath = Server.MapPath(@"~\Upload") + "\\" + filename;
  12.             System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
  13.             image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);

  14.             fs.Close();
  15.             image.Dispose();
  16.             //二维码解码
  17.             var codeDecoder = CodeDecoder(filepath);
  18.         }

  19.         /// <summary>
  20.         /// 二维码解码
  21.         /// </summary>
  22.         /// <param name="filePath">图片路径</param>
  23.         /// <returns></returns>
  24.         public string CodeDecoder(string filePath)
  25.         {
  26.             if (!System.IO.File.Exists(filePath))
  27.                 return null;
  28.             Bitmap myBitmap = new Bitmap(Image.FromFile(filePath));
  29.             QRCodeDecoder decoder = new QRCodeDecoder();
  30.             string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap));
  31.             return decodedString;
  32.         }
复制代码


2、源代码演示,相对复杂的生成方式:
界面效果:


前端代码:
  1. @{
  2.     Layout = null;
  3. }

  4. <!DOCTYPE html>

  5. <html>
  6. <head>
  7.     <meta name="viewport" content="width=device-width" />
  8.     <title>Code</title>
  9.     <script src="~/Scripts/jquery-1.10.2.js"></script>
  10.     <script type="text/javascript">
  11.         $(function () {
  12.             $("#createCode").click(function () {
  13.                 var strData = $("#strData").val();
  14.                 var level = $("#level").val();
  15.                 var encoding = $("#encoding").val();
  16.                 var version = $("#version").val();
  17.                 var scale = $("#scale").val();

  18.                 $.post("/home/CreateCode_Choose", { strData: strData, level: level, qrEncoding: encoding, version: version, scale: scale }, function (data) {
  19.                     $("img").attr("src", data);
  20.                 });
  21.             });

  22.         });

  23.     </script>
  24. </head>
  25. <body>
  26.     <div>
  27.         <p>要生成的文字(支持中文):<input id="strData" type="text" value="123456 测试" /></p>
  28.         <p>
  29.             Encoding:<select id="encoding">
  30.                 <option value="Byte">Byte</option>
  31.                 <option value="AlphaNumeric">AlphaNumeric</option>
  32.                 <option value="Numeric">Numeric</option>
  33.             </select>

  34.         </p>
  35.         <p>
  36.             Correction Level:<select id="level">
  37.                 <option value="M">M</option>
  38.                 <option value="L">L</option>
  39.                 <option value="Q">Q</option>
  40.                 <option value="H">H</option>
  41.             </select>
  42.         </p>
  43.         <p>Version:<input id="version" type="text" value="8" /></p>
  44.         <p>scale:<input id="scale" type="text" value="4" /></p>
  45.         <img src="" alt="" />
  46.         <input id="createCode" type="button" value="生成" />
  47.     </div>
  48. </body>
  49. </html>
复制代码


后台:
  1. /// 生成二维码
  2.         /// </summary>
  3.         /// <param name="strData">要生成的文字或者数字,支持中文。如: "4408810820 深圳-广州" 或者:4444444444</param>
  4.         /// <param name="qrEncoding">三种尺寸:BYTE ,ALPHA_NUMERIC,NUMERIC</param>
  5.         /// <param name="level">大小:L M Q H</param>
  6.         /// <param name="version">版本:如 8</param>
  7.         /// <param name="scale">比例:如 4</param>
  8.         /// <returns></returns>
  9.         public ActionResult CreateCode_Choose(string strData, string qrEncoding, string level, int version, int scale)
  10.         {
  11.             QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  12.             string encoding = qrEncoding;
  13.             switch (encoding)
  14.             {
  15.                 case "Byte":
  16.                     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
  17.                     break;
  18.                 case "AlphaNumeric":
  19.                     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
  20.                     break;
  21.                 case "Numeric":
  22.                     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
  23.                     break;
  24.                 default:
  25.                     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
  26.                     break;
  27.             }

  28.             qrCodeEncoder.QRCodeScale = scale;
  29.             qrCodeEncoder.QRCodeVersion = version;
  30.             switch (level)
  31.             {
  32.                 case "L":
  33.                     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
  34.                     break;
  35.                 case "M":
  36.                     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  37.                     break;
  38.                 case "Q":
  39.                     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
  40.                     break;
  41.                 default:
  42.                     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
  43.                     break;
  44.             }
  45.             //文字生成图片
  46.             Image image = qrCodeEncoder.Encode(strData);
  47.             string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg";
  48.             string filepath = Server.MapPath(@"~\Upload") + "\\" + filename;
  49.             //如果文件夹不存在,则创建
  50.             //if (!Directory.Exists(filepath))
  51.             //    Directory.CreateDirectory(filepath);
  52.             System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
  53.             image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
  54.             fs.Close();
  55.             image.Dispose();
  56.             return Content(@"/Upload/" + filename);
  57.         }
复制代码


源代码演示下载:点击下载




欢迎光临 逐梦论坛 (http://temp2023.zhumeng.org/) Powered by Discuz! 7.2