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 ...
随机推荐
- Accer 4752G添加固态硬盘 双系统
(此文一直在草稿箱里躺了一年,略作修改后发布~) 背景:电脑是2011年年末买的,用到现在也已经5年多了,好在没坏过什么硬件,有过2年疯狂打LOL的经历,之后电脑就打不动了,FPS始终上不去,启动游戏 ...
- zabbix监控docker容器状态
前言:前段时间在部署zabbix,有个需求就是需要监控容器的状态 也就是cpu 内存 io的占用,于是就自己写了一个脚本,以及模板,在这里分享一下 嘿嘿 : ) 废话我也就不多说,直接开始 首选,za ...
- git常用命令学习总结
英语真是我的硬伤啊,提示都要用百度翻译看一遍,费劲... 下面是我日常工作中遇到的各种问题汇总 1.远程服务器分支与本地代码合并 我第一次打出 git pull 显示下面的错误 就怪我英语太差,都懒得 ...
- Vigenere加密
Vigenere加密法原理很简单,实现起来也不难.与普通的单码加密法不同,明文经过加密之后,每个字母出现的频率就不会有高峰和低峰. 密钥中字母代表行和明文中的字母代表行.在vigenere表中找到对应 ...
- Linux读书笔记第五章
主要内容: 什么是系统调用 Linux上的系统调用实现原理 一个简单的系统调用的实现 1. 什么是系统调用 简单来说,系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使 ...
- 20135202闫佳歆--week3 课本1-2章学习笔记
第一章 Linux内核简介 一.Unix Unix是一个强大.健壮和稳定的操作系统. 简洁 绝大部分东西都被当做文件对待.这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open ...
- 20135234mqy-——信息安全系统设计基础第十二周学习总结
process environ.c environvar.c consumer.c 管道写端 producer.c 管道读端 testmf.c listargs.c pipedemo.c 管道 pip ...
- 20135337朱荟潼 Linux第二周学习总结——操作系统是如何工作的
一.计算机是如何工作的--总结 三个法宝 存储程序计算机.函数调用堆栈.中断机制 二.堆栈 1.是c语言程序运行时必须的一个记录调用路径和参数的空间. 函数调用框架.传递参数.保存返回地址.提供局部变 ...
- C#使用结构体,输入5个人的学号,姓名,分数,按照成绩高低排列打印出来
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 软件工程作业 - Week 1
构建之法读后疑问: 初步的完成构建程序设计思路之后实现过程中发现了问题或者可以优化的地方是立马就改进还是完成之后按照步骤统一进行优化. 覆盖性测试,针对一些永远用不到只是用来预防极为极端的情况下,例如 ...