zoukankan      html  css  js  c++  java
  • ASP.NET实现二维码(QRCode)的创建和读取

    一、项目引用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  
            {  
                100%;  
            }  
            #txt_qr  
            {  
                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(@"~UtiltyQRCodeupload") + "\" + 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(@"~UtiltyQRCodeupload") + "\" + 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;  
            }  
        }  
      
    }  
     
     
  • 相关阅读:
    程序数据集算地数据库
    使用属性升级mybank
    第一个C#程序
    CSS3动画
    定位网页元素的解析
    CSS3中的浮动
    CSS中的盒子模型
    (十三)mybatis 整合 ehcache
    (十二)mybatis 查询缓存
    (十一)延迟加载
  • 原文地址:https://www.cnblogs.com/ranran/p/4201014.html
Copyright © 2011-2022 走看看