ASP.NET实现二维码(QRCode)的创建和读取_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > ASP.NET实现二维码(QRCode)的创建和读取

ASP.NET实现二维码(QRCode)的创建和读取

 2014/12/5 16:09:13  Ranran  程序员俱乐部  我要评论(0)
  • 摘要:一、项目引用QRCode的DLL文件(ThoughtWorks.QRCode.dll)二、ASPX页面(两个jquery的js文件请自行去官网下载):[html]<htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title>二维码工具测试</title><scripttype="text/javascript"src="../.
  • 标签:.net ASP.NET 创建 实现 net 二维码
class="box_body">
一、项目引用QRCode的DLL文件(ThoughtWorks.QRCode.dll)   二、ASPX页面(两个jquery的js文件请自行去官网下载):   [html]  <html xmlns="http://www.w3.org/1999/xhtml">   <head runat="server">       <title>二维码工具测试</title>       <script type="text/javascript" src="../../Scripts/Jquery/jquery-1.6.2.js"></script>       <script type="text/javascript" src="../../Scripts/Jquery/jquery.form.js"></script>           <script type="text/javascript" src="js/test.js"></script>       <style type="text/css">           .style1           {               width: 100%;           }           #txt_qr           {               width: 632px;           }       </style>   </head>   <body>       <div>           <table class="style1">               <tr>                   <td>                       输入文字:                   </td>                   <td>                       <input type="text" id="txt_qr" name="txt_qr" />                   </td>               </tr>               <tr>                   <td>                       二维码图片                   </td>                   <td>                       <img id="qrimg" alt="二维码图片" />                   </td>               </tr>               <tr>                   <td>                       生成选项                   </td>                   <td>                       Encoding:<select id="Encoding">                           <option value="Byte">Byte</option>                           <option value="AlphaNumeric">AlphaNumeric</option>                           <option value="Numeric">Numeric</option>                       </select>                       Correction Level:<select id="Level">                           <option value="M">M</option>                           <option value="L">L</option>                           <option value="Q">Q</option>                           <option value="H">H</option>                       </select>                       Version:<input id="txt_ver" type="text" value="7" />(1-40) Size:<input id="txt_size"                           type="text" value="4" />                   </td>               </tr>               <tr>                   <td colspan="4">                       <input type="button" onclick="getQrImg();" value="生成二维码" />                   </td>               </tr>               <tr>                   <td>                       <form id="qrForm" action="Ashx/test.ashx" method="post" enctype="multipart/form-data">                       <input type="file" id="file_qr" name="file_qr" /><input type="submit" value="读取二维码" />                       </form>                   </td>                   <td colspan="1">                       <img id="img_qr" alt="要读取的图片" /><br />                       <input id="txt_readqr" type="text" />                   </td>               </tr>           </table>       </div>   </body>   </html>     三、test.js文件   [javascript]   $(document).ready(function ()   {       var options = {           beforeSubmit: showRequest,             success: showResponse,                     dataType: 'json',            clearForm: true,                       error: function (request, message, ex)            {               alert('错误:' + message);           }       };            $('#qrForm').ajaxForm(options);   });   function showRequest(formData, jqForm, options)   {        return true;   }   function showResponse(responseText, statusText, xhr, $form)   {       if (responseText[0].count == 0)       {           alert(responseText[0].list[0].error);           return false;       }       $("#img_qr").attr("src", responseText[0].list[0].imgurl);       $("#txt_readqr").val(responseText[0].list[0].qrtext);       return false;      }   function getQrImg()   {       var txt_qr = escape($.trim($("#txt_qr").val()));       var qrEncoding = $("#Encoding").val(); ;       var Level = $("#Level").val(); ;       var txt_ver = $("#txt_ver").val(); ;       var txt_size = $("#txt_size").val(); ;       $.ajax({           type: "GET",           data: "cmd=set&txt_qr=" + txt_qr + "&qrEncoding=" + qrEncoding + "&Level=" + Level + "&txt_ver=" + txt_ver + "&txt_size=" + txt_size,           url: "Ashx/test.ashx",           dataType: 'text',           beforeSend: function (x)           {               x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");           },           success: function (json)           {               var dataObj = eval(json);                            $("#qrimg").attr("src", dataObj[0].list[0].imgurl);                           return false;           },           error: function (request, message, ex)           {               alert("错误:" + message);           }       });   }   四、test.ashx,没有判断目录是否存在等问题,请自行建立或者更改代码。   [csharp]   using System;   using System.Web;   using System.Drawing;   using System.Drawing.Imaging;   using System.Text;   using System.Text.RegularExpressions;      using ThoughtWorks.QRCode.Codec;   using ThoughtWorks.QRCode.Codec.Data;   using ThoughtWorks.QRCode.Codec.Util;   public class test : IHttpHandler   {          public void ProcessRequest(HttpContext context)       {           context.Response.ContentType = "text/plain";           string cmd = context.Request["cmd"] == null ? "get" : context.Request["cmd"].ToString();           string filename = string.Empty;           string filepath = string.Empty;           switch (cmd)           {               case "get":                   if (context.Request.Files.Count > 0)                   {                       for (int j = 0; j < context.Request.Files.Count; j++)                       {                           filename = Guid.NewGuid().ToString() + "_tmp.jpg";                           filepath = context.Server.MapPath(@"~\Utilty\QRCode\upload") + "\\" + filename;                           string qrdecode = string.Empty;                           HttpPostedFile uploadFile = context.Request.Files[j];                           uploadFile.SaveAs(filepath);                              QRCodeDecoder decoder = new QRCodeDecoder();                                                    Bitmap bm = new Bitmap(filepath);                           qrdecode = decoder.decode(new QRCodeBitmapImage(bm));                           bm.Dispose();                                                                        context.Response.Write("[{\"count\":1,\"list\":[{\"imgurl\":\"upload/" + filename + "\",\"qrtext\":\"" + qrdecode + "\"}]}]");                       }                   }                   else                   {                       context.Response.Write("[{\"count\":0,\"list\":[{\"error\":\"没有上传文件\"}]}]");                   }                   break;               case "set":                   string txt_qr =ConverToGB(context.Request["txt_qr"].ToString().Trim(), 16);                   string qrEncoding = context.Request["qrEncoding"].ToString();                   string Level = context.Request["Level"].ToString();                   string txt_ver = context.Request["txt_ver"].ToString();                   string txt_size = context.Request["txt_size"].ToString();                      QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();                   String encoding = qrEncoding;                   if (encoding == "Byte")                   {                       qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;                   }                   else if (encoding == "AlphaNumeric")                   {                       qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;                   }                   else if (encoding == "Numeric")                   {                       qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;                   }                   try                   {                       int scale = Convert.ToInt16(txt_size);                       qrCodeEncoder.QRCodeScale = scale;                   }                   catch (Exception ex)                   {                       return;                   }                   try                   {                       int version = Convert.ToInt16(txt_ver);                       qrCodeEncoder.QRCodeVersion = version;                   }                   catch (Exception ex)                   {                       return;                   }                   string errorCorrect = Level;                   if (errorCorrect == "L")                       qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;                   else if (errorCorrect == "M")                       qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;                   else if (errorCorrect == "Q")                       qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;                   else if (errorCorrect == "H")                       qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;                      Image image;                   String data = txt_qr;                   image = qrCodeEncoder.Encode(data);                   filename = Guid.NewGuid().ToString() + ".jpg";                   filepath = context.Server.MapPath(@"~\Utilty\QRCode\upload") + "\\" + filename;                   System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);                   image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);                   fs.Close();                   image.Dispose();                   context.Response.Write("[{\"count\":1,\"list\":[{\"imgurl\":\"upload/" + filename + "\"}]}]");                      //context.Response.Write(@"upload\" + filename);                   break;           }          }       /// <summary>       /// 10进制或16进制转换为中文       /// </summary>       /// <param name="name">要转换的字符串</param>       /// <param name="fromBase">进制(10或16)</param>       /// <returns></returns>       public string ConverToGB(string text, int fromBase)       {           string value = text;           MatchCollection mc;           System.Text.StringBuilder sb = new System.Text.StringBuilder();           switch (fromBase)           {               case 10:                      MatchCollection mc1 = Regex.Matches(text, @"&#([\d]{5})", RegexOptions.Compiled | RegexOptions.IgnoreCase);                   foreach (Match _v in mc1)                   {                       string w = _v.Value.Substring(2);                       w = Convert.ToString(int.Parse(w), 16);                       byte[] c = new byte[2];                       string ss = w.Substring(0, 2);                       int c1 = Convert.ToInt32(w.Substring(0, 2), 16);                       int c2 = Convert.ToInt32(w.Substring(2), 16);                       c[0] = (byte)c2;                       c[1] = (byte)c1;                       sb.Append(Encoding.Unicode.GetString(c));                   }                   value = sb.ToString();                      break;               case 16:                   mc = Regex.Matches(text, @"\\u([\w]{2})([\w]{2})", RegexOptions.Compiled | RegexOptions.IgnoreCase);                   if (mc != null && mc.Count > 0)                   {                          foreach (Match m2 in mc)                       {                           string v = m2.Value;                           string w = v.Substring(2);                           byte[] c = new byte[2];                           int c1 = Convert.ToInt32(w.Substring(0, 2), 16);                           int c2 = Convert.ToInt32(w.Substring(2), 16);                           c[0] = (byte)c2;                           c[1] = (byte)c1;                           sb.Append(Encoding.Unicode.GetString(c));                       }                       value = sb.ToString();                   }                   break;           }           return value;       }       public bool IsReusable       {           get           {               return false;           }       }      }    
 
发表评论
用户名: 匿名