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" οnclick="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;  
}  
}  
}  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杨玉基:知识图谱在美团推荐场景中的应用

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Redis进阶知识一览

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

UI代码练习-视图的层次关系

2019独角兽企业重金招聘Python工程师标准>>> // // AppDelegate.h // 视图的层次关系 // // Created by on 14-12-17. // Copyright (c) 2014年 apple. All rights reserved. //#import <UIKit/UIKit.h> #import <CoreData/CoreData.h>interface Ap…

arthas学习图文记录

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

利用矩阵的n次方求图的连通性

设A&#xff08;n x n&#xff09;为一个图的邻接矩阵&#xff0c;则a(i,j)表示两个点之间是否连通&#xff08;1&#xff1a;连通&#xff0c;0&#xff1a;不连通&#xff09;。那么A的k次方中的每一个a&#xff08;i&#xff0c;j&#xff09;表示点i和j之间长度为k的路的条…

使用HBuilder新建项目

依次点击文件→新建→选择Web项目(按下CtrlN,W可以触发快速新建(MacOS请使用CommandN,然后左键点击Web项目)) 如上图&#xff0c;请在A处填写新建项目的名称&#xff0c;B处填写(或选择)项目保存路径(更改此路径HBuilder会记录&#xff0c;下次默认使用更改后的路径)&#xff0…

iOS应用开发视频教程笔记(二)My First iOS App

这课主要是以一个计算器一个用为例子&#xff0c;教你怎么使用XCode&#xff0c;如何使用MVC设计模式创建应用。 (1)新建一个single view application模版的应用 打开xcode并点击“创建一个新xcode项目”&#xff0c;进入项目创建界面&#xff0c;这个界面让我们为应用选择一个…

牛顿迭代法(Newton#39;s Method)

牛顿迭代法&#xff08;简称牛顿法&#xff09;由英国著名的数学家牛顿爵士最早提出。可是&#xff0c;这一方法在牛顿生前并未公开发表&#xff08;讨厌的数学家们还是鼓捣出来了&#xff09;牛顿法的作用是使用迭代的方法来求解函数方程的根。简单地说&#xff0c;牛顿法就是…

【深入理解计算机系统CSAPP】第六章 存储器层次结构

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

【转】无刷新验证用户名可用性

在用户注册时&#xff0c;我们经常需要检查用户名是否存在&#xff0c;本文就是实现无刷新验证用户名 打开开发环境VS 2005,新建项目(或打开现有项目),新建一个Web窗体,命名为 Default.aspx 代码如下&#xff1a; View Code <% Page Language"C#" AutoEventWireu…

Python数据分析--Numpy常用函数介绍(2)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

bzoj3224: Tyvj 1728 普通平衡树(打个splay暖暖手)

&#xff08;其实今天好热啊&#xff1f; 题目大意&#xff1a;插入&#xff0c;删除&#xff0c;k小&#xff0c;前驱后继&#xff0c;数的排名。 splay和treap裸题...过几天补个treap的 splay: #include<iostream> #include<cstdlib> #include<cstring> #i…

手机相机自动识别语音提示

技术背景&#xff1a; 时下流行的手机拍照功能越来越多&#xff0c;在众多的手机拍照过程中&#xff0c;我们只在于手机拍照的效果和风景是否美好&#xff0c;甚至拿着手机自我狂拍&#xff0c;留下美好的记忆和回忆。 有时候根据手机相机的已有技术功能随便一设置就能拍到理想…

c# Invoke和BeginInvoke 区别

转自http://www.cnblogs.com/c2303191/articles/826571.html Control的Invoke和BeginInvoke是相对于支线线程&#xff08;因为一般在支线线程中调用&#xff0c;用来更新主线程ui&#xff09;Invoke立即插入主线程中执行&#xff0c;而BeginInvoke 要等主线程结束才执行 近日&a…

04 Springboot 格式化LocalDateTime

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

DNN使用非80端口和总是跳转到http://localhost问题的解决

2019独角兽企业重金招聘Python工程师标准>>> 我试图在一台服务器上安装一个DNN网站时&#xff0c;遇到了一些问题。问题一&#xff1a;遇到的第一个问题就是网站总是自动导向到localhost。不管我怎么试&#xff0c;只要我输入http://domain.com/dnn&#xff0c;总是…

Jmter操作数据库

1、导入jdbc的jar包&#xff0c;因为jmeter本身不能直接连接mysql&#xff0c;所以需要导入第三方的jar包&#xff0c;来连接mysql&#xff0c;如下操作&#xff1a;2、创建数据库连接如下&#xff1a; 3、配置mysql的url、端口号、账号、密码注意上面的Database URL&#xff1…

ComponentOne FlexGrid for WinForms 中文版快速入门(9)—过滤

C1FlexGrid过滤 表格中的数据过滤通常有两种形式&#xff1a; 基于表头&#xff1a;过滤器的图标出现在有一个过滤器适用于它的每一列。用户可以通过点击过滤器的图标来查看和编辑过滤器。这是Windows 7或Vista或C1FlexGrid控件使用的机制。这种类型的过滤器的主要优点是&…

Pycharm搜索导航之文件名、符号名搜索

1、准备一个工程 向你的工程中添加一个Python文件&#xff0c;并输入一些源码&#xff0c;例如&#xff1a; 2、转到对应文件、类、符号 Pycharm提供的一个很强力的功能就是能够根据名称跳转到任何文件、类、符号所在定义位置。 3、跳转到文件 按下CtrlShiftN快捷键&#xff0c…

分享网页设计当中使用进度条打造精美界面最佳例子

进度条是用户界面的重要组成部分&#xff0c;他向用户显示当前的下载进度&#xff0c;一个小的圆形因素使得界面不是更方便也更容易理解让我们举个例子&#xff0c;想象你去一个网站&#xff0c;你需要下载视频&#xff0c;你选择一个文件&#xff0c;按下"下载"按钮…