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{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;}}}

ASP.NET实现二维码(QRCode)的创建和读取的更多相关文章
- asp.net生成二维码的方法
asp.net生成二维码的方法 [复制链接] 这个要利用一个Dll文件. 如下 Gma.QrCodeNet.Encoding.dll (105.5 KB, 下载次数: 27) 当然大家也可以直 ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- Java实现二维码QRCode的编码和解码
涉及到的一些主要类库,方便大家下载: 编码lib:Qrcode_swetake.jar (官网介绍-- http://www.swetake.com/qr/index-e.html) 解码lib: ...
- js生成二维码 qrcode
js生成二维码 QRcode npm 地址 1.安装qrcode //在项目文件夹中执行: npm install --save qrcode //或者,将其全局安装以使用qrcode命令行来保存qr ...
- Java生成二维码QRCode.jar
所需jar包:QRCode.jar:http://download.csdn.net/detail/xuxu198899223/7717745 package ewm; import java.awt ...
- Delphi Mercadopago支付【支持支持获取账户信息和余额、创建商店,商店查询、创建二维码、二维码查询、创建订单、订单查询、订单退款等功能】
作者QQ:(648437169) 点击下载➨Delphi Mercadopago支付 [Delphi Mercadopago支付]支持 支持支持获取账户信息和余额.创建商店,商店查询.创建二维码.二维 ...
- ASP.NET 生成二维码(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
最近做项目遇到生成二维码的问题,发现网上用的最多的是ThoughtWorks.QRCode和QrCode.Net两种方式.访问官网看着例子写了两个Demo,使用过程中发现两个都挺好用的,Thought ...
- ASP.NET生成二维码
下面使用ThoughtWorks.QRCode.dll这个类库,实现生成二维码 使用时需要增加:下面三个命名空间 using ThoughtWorks.QRCode.Codec; using Thou ...
- 二维码QRCode
package com.aig.ecompass.ecard; import java.awt.image.BufferedImage; import java.io.File; import jav ...
随机推荐
- JMeter采用NON GUI模式时如何记录并查看错误
在GUI模式下执行JMeter测试时,我们可以通过添加View Results Tree组件来查看JMeter请求的各类详情.那如果在正式测试场景中,当我们采用NON GUI模式时,遇到了断言或其他错 ...
- 关于Unity物理事件的执行顺序的最新理解
物体A: public class A:{ B b; void FixedUpdate(){ if(input.GetKeyDow(Keycode.I)) { collider.enable=fals ...
- 3. Python3 基本数据类型
Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型& ...
- appearance格式化表单元素的边框,在chrome和FF下鼠标点击时会多出一个蓝色边框
可在元素上添加样式 -webkit-appearance: none; -moz-appearance:none;outline:none; 清除掉元素所有的外貌,以便自定义风格
- JetBrains系列WebStorm等中文输入法无法跟随光标的问题的解决办法
参考:https://blog.csdn.net/wang414300980/article/details/79537875 电脑配置: 解决这个问题的思路就是修改启动软件的JDK,有以下几个方法: ...
- Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景
我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...
- 【题解】 [HNOI2004]宠物收养场(Splay)
懒得复制,戳我戳我 Solution: \(Splay\)板子,注意交换的地方,然后就是注意不要越界node[x],应该是\(node[now]\),其次就是数组可以开大点 Code: //It is ...
- 年度编程语言最佳候选人:Kotlin vs. C
转瞬之间,今年已进入为期不足一个月的倒计时模式.在编程语言界,谁将问鼎 2017 年度编程语言?诸多开发者众说纷纭,有人说是最近风头正盛且被纳入中国高考科目的 Python.有人认为还是老牌常青藤 J ...
- emWin 界面切换注意事项
@2018-07-10 emWin 在做界面切换时,须将切换前的界面所有信息 “删除”,否则将造成切换后的界面死机 此 “删除” 对象包括: > 界面上绘制的曲线(随时间一直变化).绘制的2D ...
- 【转】MPU6050的数据获取、分析与处理
摘要 MPU6050是一种非常流行的空间运动传感器芯片,可以获取器件当前的三个加速度分量和三个旋转角速度.由于其体积小巧,功能强大,精度较高,不仅被广泛应用于工业,同时也是航模爱好者的神器,被安装在各 ...