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;

}

}

}

时间: 2024-10-14 14:31:42

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

Java实现二维码QRCode的编码和解码

涉及到的一些主要类库,方便大家下载: 编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html) 解码lib:qrcode.jar                 (官网介绍-- http://sourceforge.jp/projects/qrcode/) [一].编码: Java代码QRCodeEncoderHandler.java package michael.qrcode; import java

java利用zxing开源工具生成二维码QRCode

原文:java利用zxing开源工具生成二维码QRCode 源代码下载地址:http://www.zuidaima.com/share/1550463727340544.htm

Delphi Mercadopago支付【支持支持获取账户信息和余额、创建商店,商店查询、创建二维码、二维码查询、创建订单、订单查询、订单退款等功能】

Delphi Mercadopago支付下载 [Delphi Mercadopago支付]支持 支持支持获取账户信息和余额.创建商店,商店查询.创建二维码.二维码查询.创建订单.订单查询.订单退款等功能 原文地址:https://www.cnblogs.com/zhimamaigua/p/11251646.html

ASP.NET 生成二维码(采用ThoughtWorks.QRCode和QrCode.Net两种方式)

最近做项目遇到生成二维码的问题,发现网上用的最多的是ThoughtWorks.QRCode和QrCode.Net两种方式.访问官网看着例子写了两个Demo,使用过程中发现两个都挺好用的,ThoughtWorks.QRCode的功能更多一些,但是dll文件有6兆,QrCode.Net只有400多K,大家根据自己的需要选择吧.附上代码仅供参考. 并且提供VS2013写的一个Demo提供给大家免费下载.如有疑问欢迎交流. ThoughtWorks.QRCode: private void Create

ASP.NET生成二维码

下面使用ThoughtWorks.QRCode.dll这个类库,实现生成二维码 使用时需要增加:下面三个命名空间 using ThoughtWorks.QRCode.Codec; using ThoughtWorks.QRCode.Codec.Data; using ThoughtWorks.QRCode.Codec.Util; 下面代码主要是在asp.net中,生成一张二维码图片,在网页中显示,而且,将二维码图片保存在了,D:\zlf\zz.png: C# 代码   复制 using Syst

iOS的二维码(QRCode)的学习

QRCode 二维码的学习: 需要倒入一个框架   AVFoundation 1.需要有输入设备, 2.输出设备 (解析输入设备的内容) 3.有一个会话类(输入输出完事了需要哪一个是输入那一个是输出) AVCaptureSession 4.一个展示扫描的内容 layer 二 : 然后创建 三:设置代理 --获取数据 会话类不知道哪一个是时输入设备 哪一个是 输出设备的 需要衔接她们 去绑定输入和输出设备 (做一个是否的判断). 四:设置扫描类型 五:开始扫描 [self.session star

二维码QRCode

package com.aig.ecompass.ecard; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.goog

ASP.NET生成二维码的例子

分享一例c#生成二维码的代码,直接引用ThoughtWorks.QRCode.dll 类生成二维码,有需要的朋友参考下. 方法1,直接引用ThoughtWorks.QRCode.dll 类,生成二维码. 代码示例: ThoughtWorks.QRCode.Codec.QRCodeEncoder encoder = new QRCodeEncoder(); encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方法(注意:BYT

猫猫学iOS之二维码学习,快速打开相机读取二维码

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 上一篇文章写了怎么生成二维码,这儿就说说怎么读取吧,反正也很简单,iOS封装的太强大了 步骤呢就是这样: 读取二维码需要导入AVFoundation框架#import <AVFoundation/AVFoundation.h> 1:利用摄像头识别二维码中的内容(模拟器不行). 2:输入(摄像头). 3:由会话将摄像头采集到的二维码图像转换成字符串数据. 4:输