[ASP.NET]二维码的创建

简介:

又好一段时间没有写写东西了,继续回归原来的模式,多做记录,最近要实现个unity的二维码方面的功能,首先就要解决生成二维码的问题,这个倒是有这方面的组件,然后我通过强大的反编译工具Reflector(想必.NET程序都知道的神器),来插件内部实现的原理。废话不多说,先看效果二维码在线生成工具,附带一句这里是QR码,当然是比较简单的,纯属新手入门级看的

在线测试:http://114.92.225.191:5006/

更多精彩教程请关注我的微博

效果图

Center

Center

了解QR码

Center


项目解析

1.用反编译神器来查看组件的内部实现原理

a)生成图片方法

主要的就是这个方法是用来生成一张二维码图片的,其中this.calQrcode(encoding.GetBytes(content))这个方法是生成二维码对应图片的一个bool数组,然后就是通过这个0,1数组来绘制成二维码

Center


[csharp] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. publicvirtual Bitmap Encode(string content, Encoding encoding)  

  2. {  

  3. //计算得到bool值数组

  4. bool[][] flagArray = this.calQrcode(encoding.GetBytes(content));  

  5. //定义画刷

  6.    SolidBrush brush = new SolidBrush(this.qrCodeBackgroundColor);  

  7.    Bitmap image = new Bitmap((flagArray.Length * this.qrCodeScale) + 1, (flagArray.Length * this.qrCodeScale) + 1);  

  8. //绘图

  9.    Graphics graphics = Graphics.FromImage(image);  

  10. //绘制二维码背景

  11.    graphics.FillRectangle(brush, new Rectangle(0, 0, image.Width, image.Height));  

  12. //设置背景颜色

  13.    brush.Color = this.qrCodeForegroundColor;  

  14. //根据bool数组绘制前端二维码

  15. for (int i = 0; i < flagArray.Length; i++)  

  16.    {  

  17. for (int j = 0; j < flagArray.Length; j++)  

  18.        {  

  19. if (flagArray[j][i])  

  20.            {  

  21.                graphics.FillRectangle(brush, j * this.qrCodeScale, i * this.qrCodeScale, this.qrCodeScale, this.qrCodeScale);  

  22.            }  

  23.        }  

  24.    }  

  25. return image;  

  26. }  



b)生成bool数组方法以及原理


Center

这里主要是用到


创建.NET应用程序

Default.aspx


  1. <%@ Page Language="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default" %>

  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  3. <htmlxmlns="http://www.w3.org/1999/xhtml">

  4. <headrunat="server">

  5. <title>无标题页</title>

  6. </head>

  7. <body>

  8. <formid="form1"runat="server">

  9. <div>

  10.        请输入内容:<asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>

  11. <br/>

  12.        生成的文件夹名称:<asp:TextBoxID="TextBox2"runat="server"></asp:TextBox>

  13. <br/>

  14.        生成的二维码名称:<asp:TextBoxID="TextBox3"runat="server"></asp:TextBox>

  15. <br/>

  16. <asp:LabelID="Label1"runat="server"Text=""></asp:Label>

  17. <br/>

  18. <asp:ButtonID="Button1"runat="server"Text="生成二维码"onclick="Button1_Click"/>

  19. </div>

  20. <div>

  21. <ahref="http://blog.csdn.net/dingxiaowei2013">项目解析</a>

  22. </div>

  23. </form>

  24. </body>

  25. </html>


Default.aspx.cs



[csharp] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. using System;  

  2. using ThoughtWorks.QRCode.Codec;  

  3. using System.IO;  

  4. using System.Text;  

  5. using System.Drawing;  

  6. public partial class _Default : System.Web.UI.Page  

  7. {  

  8. protectedvoid Page_Load(object sender, EventArgs e)  

  9.    {  

  10.    }  

  11. protectedvoid Button1_Click(object sender, EventArgs e)  

  12.    {  

  13.        QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();  

  14. //设置背景颜色

  15. //qrCodeEncoder.QRCodeBackgroundColor = Color.FromArgb(255, 255, 0);

  16. //设置前景色

  17. //qrCodeEncoder.QRCodeForegroundColor = Color.GreenYellow;

  18. //编码格式

  19.        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;  

  20. //设置每个二维码像素点的大小

  21.        qrCodeEncoder.QRCodeScale = 4;  

  22. //QR码版本

  23. //QR码所允许规格系列为21×21模块(版本1)~177×177模块(版本40)

  24.        qrCodeEncoder.QRCodeVersion = 8;  

  25. //纠错等级

  26. //level L : 最大 7% 的错误能够被纠正;

  27. //level M : 最大 15% 的错误能够被纠正;  

  28. //level Q : 最大 25% 的错误能够被纠正;  

  29. //level H : 最大 30% 的错误能够被纠正;

  30.        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;  

  31. //自定义的二维码数据

  32.        String data = TextBox1.Text.ToString();  

  33. //Response.Write(data);

  34. //画图

  35.        System.Drawing.Bitmap image = qrCodeEncoder.Encode(data);  

  36.        System.IO.MemoryStream MStream = new System.IO.MemoryStream();  

  37.        image.Save(MStream, System.Drawing.Imaging.ImageFormat.Png);  

  38.        Response.ClearContent();  

  39.        Response.ContentType = "image/Png";  

  40. //写图片

  41.        Response.BinaryWrite(MStream.ToArray());  

  42. //文件路径

  43. //FileInfo f = new FileInfo(@"d:\zl.png");

  44. //Directory.CreateDirectory("d:\\"+TextBox2.Text.Trim());

  45. //当前项目路径

  46.        Directory.CreateDirectory(Server.MapPath("~/")+"images"+"//"+TextBox2.Text.Trim());  

  47. if (!File.Exists(Server.MapPath("~/") + "images" + "//" + TextBox2.Text.Trim() + "//" + TextBox3.Text.Trim() + ".png"))  

  48.        {  

  49. //FileStream fs = new FileStream("d:\\" + TextBox2.Text.Trim() + "\\" + TextBox3.Text.Trim() + ".png", FileMode.CreateNew, FileAccess.ReadWrite);

  50.            FileStream fs = new FileStream(Server.MapPath("~/") + "images" + "//" + TextBox2.Text.Trim() + "//" + TextBox3.Text.Trim() + ".png", FileMode.CreateNew, FileAccess.ReadWrite);  

  51.            BinaryWriter bw = new BinaryWriter(fs, UTF8Encoding.UTF8);  

  52. byte[] by = MStream.ToArray();  

  53. for (int i = 0; i < MStream.ToArray().Length; i++)  

  54.                bw.Write(by[i]);  

  55.            fs.Close();  

  56.        }  

  57. else

  58.        {  

  59.            Label1.Text = "该图片已经存在";  

  60.        }  

  61.    }  






本文转蓬莱仙羽 51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1390756 ,如需转载请自行联系原作者
相关文章
|
3月前
|
开发框架 .NET Linux
2款高效的.NET二维码生成类库
2款高效的.NET二维码生成类库
|
6月前
|
JSON 缓存 小程序
.NET生成微信小程序推广二维码
.NET生成微信小程序推广二维码
|
数据采集 自然语言处理 搜索推荐
.Net版本二维码生成器,可生成多种格式:WIFI、网址、邮箱等。
.Net版本二维码生成器,可生成多种格式:WIFI、网址、邮箱等。
95 0
分享一个.net 基于QRCoder包生成二维码的方法,
最近项目中需要生成二维码,找了很多包,最好还是感觉QRCoder包最好用,下面发出来分享给大家
164 0
|
JSON 缓存 小程序
.NET生成小程序码,并合自定义背景图生成推广小程序二维码
.NET生成小程序码,并合自定义背景图生成推广小程序二维码
238 0
.NET生成小程序码,并合自定义背景图生成推广小程序二维码
|
BI C#
如何用.NET生成二维码?
二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。二维码技术已经被广泛应用于公安、外交、军事等部门对各类证件的管理等。本文介绍一种如何种C#语言生成二维码的技术。
855 0
如何用.NET生成二维码?
|
Web App开发 C# Windows
如何在.NET上处理二维码
本文转载:http://www.cnblogs.com/shanyou/p/3932695.html 在移动设备,网站以及应用程序间传送数据,而使用二维码真是一种较快捷的方法,也避免了蓝牙配对的混乱状况。
946 0
|
.NET 图形学
[ASP.NET]二维码的创建
又好一段时间没有写写东西了,继续回归原来的模式,多做记录,最近要实现个unity的二维码方面的功能,首先就要解决生成二维码的问题,这个倒是有这方面的组件,然后我通过强大的反编译工具Reflector(想必.NET程序都知道的神器),来插件内部实现的原理。
1037 0