欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP.NET实现二维码(QRCode)的创建和读取实例】,下面是详细的讲解!
ASP.NET实现二维码(QRCode)的创建和读取实例
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】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 【asp】asp.net开发中常见公共捕获异常方式总结(
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
