[ASP.NET]二维码的创建

简介: 又好一段时间没有写写东西了,继续回归原来的模式,多做记录,最近要实现个unity的二维码方面的功能,首先就要解决生成二维码的问题,这个倒是有这方面的组件,然后我通过强大的反编译工具Reflector(想必.NET程序都知道的神器),来插件内部实现的原理。

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

在线测试:http://114.92.234.2:5005/

效果图


了解QR码



项目解析

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

a)生成图片方法

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

public virtual Bitmap Encode(string content, Encoding encoding)
{
    //计算得到bool值数组
    bool[][] flagArray = this.calQrcode(encoding.GetBytes(content));
    //定义画刷
    SolidBrush brush = new SolidBrush(this.qrCodeBackgroundColor);
    Bitmap image = new Bitmap((flagArray.Length * this.qrCodeScale) + 1, (flagArray.Length * this.qrCodeScale) + 1);
    //绘图
    Graphics graphics = Graphics.FromImage(image);
    //绘制二维码背景
    graphics.FillRectangle(brush, new Rectangle(0, 0, image.Width, image.Height));
    //设置背景颜色
    brush.Color = this.qrCodeForegroundColor;
    //根据bool数组绘制前端二维码
    for (int i = 0; i < flagArray.Length; i++)
    {
        for (int j = 0; j < flagArray.Length; j++)
        {
            if (flagArray[j][i])
            {
                graphics.FillRectangle(brush, j * this.qrCodeScale, i * this.qrCodeScale, this.qrCodeScale, this.qrCodeScale);
            }
        }
    }
    return image;
}

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


这里主要是用到


创建.NET应用程序

Default.aspx

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

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        请输入内容:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        生成的文件夹名称:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <br/>
        生成的二维码名称:<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
        <br/>
        <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
        <br/>
        <asp:Button ID="Button1" runat="server" Text="生成二维码" onclick="Button1_Click" />
    </div>
    <div>
    <a href="http://blog.csdn.net/dingxiaowei2013">项目解析</a>
    </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;

using ThoughtWorks.QRCode.Codec;
using System.IO;
using System.Text;
using System.Drawing;


public partial class _Default : System.Web.UI.Page 
{
 
    protected void Page_Load(object sender, EventArgs e)
    {
        
        
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
        //设置背景颜色
        //qrCodeEncoder.QRCodeBackgroundColor = Color.FromArgb(255, 255, 0);
        //设置前景色
        //qrCodeEncoder.QRCodeForegroundColor = Color.GreenYellow;
        //编码格式
        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;

        //设置每个二维码像素点的大小
        qrCodeEncoder.QRCodeScale = 4;
        //QR码版本
        //QR码所允许规格系列为21×21模块(版本1)~177×177模块(版本40)
        qrCodeEncoder.QRCodeVersion = 8;
        //纠错等级
        //level L : 最大 7% 的错误能够被纠正; 
        //level M : 最大 15% 的错误能够被纠正;  
        //level Q : 最大 25% 的错误能够被纠正;  
        //level H : 最大 30% 的错误能够被纠正;
        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;

        //自定义的二维码数据
        String data = TextBox1.Text.ToString();
        //Response.Write(data);
        //画图
        System.Drawing.Bitmap image = qrCodeEncoder.Encode(data);

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

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

        Response.ClearContent();

        Response.ContentType = "image/Png";
        //写图片
        Response.BinaryWrite(MStream.ToArray());


        //文件路径
        //FileInfo f = new FileInfo(@"d:\zl.png");
        //Directory.CreateDirectory("d:\\"+TextBox2.Text.Trim());
        //当前项目路径
        Directory.CreateDirectory(Server.MapPath("~/")+"images"+"//"+TextBox2.Text.Trim());
        if (!File.Exists(Server.MapPath("~/") + "images" + "//" + TextBox2.Text.Trim() + "//" + TextBox3.Text.Trim() + ".png"))
        {
            //FileStream fs = new FileStream("d:\\" + TextBox2.Text.Trim() + "\\" + TextBox3.Text.Trim() + ".png", FileMode.CreateNew, FileAccess.ReadWrite);
            FileStream fs = new FileStream(Server.MapPath("~/") + "images" + "//" + TextBox2.Text.Trim() + "//" + TextBox3.Text.Trim() + ".png", FileMode.CreateNew, FileAccess.ReadWrite);
            BinaryWriter bw = new BinaryWriter(fs, UTF8Encoding.UTF8);
            byte[] by = MStream.ToArray();
            for (int i = 0; i < MStream.ToArray().Length; i++)
                bw.Write(by[i]);
            fs.Close();
        }
        else
        {
            Label1.Text = "该图片已经存在";
        }
    }
}

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

Unity QQ群:375151422,858550,6348968         cocos2dx QQ群:280818155

====================== 相互学习,共同进步 ===================


相关文章
|
4月前
|
开发框架 .NET Linux
2款高效的.NET二维码生成类库
2款高效的.NET二维码生成类库
|
7月前
|
JSON 缓存 小程序
.NET生成微信小程序推广二维码
.NET生成微信小程序推广二维码
|
数据采集 自然语言处理 搜索推荐
.Net版本二维码生成器,可生成多种格式:WIFI、网址、邮箱等。
.Net版本二维码生成器,可生成多种格式:WIFI、网址、邮箱等。
104 0
分享一个.net 基于QRCoder包生成二维码的方法,
最近项目中需要生成二维码,找了很多包,最好还是感觉QRCoder包最好用,下面发出来分享给大家
170 0
|
JSON 缓存 小程序
.NET生成小程序码,并合自定义背景图生成推广小程序二维码
.NET生成小程序码,并合自定义背景图生成推广小程序二维码
242 0
.NET生成小程序码,并合自定义背景图生成推广小程序二维码
|
BI C#
如何用.NET生成二维码?
二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。二维码技术已经被广泛应用于公安、外交、军事等部门对各类证件的管理等。本文介绍一种如何种C#语言生成二维码的技术。
856 0
如何用.NET生成二维码?
|
Web App开发 C# Windows
如何在.NET上处理二维码
本文转载:http://www.cnblogs.com/shanyou/p/3932695.html 在移动设备,网站以及应用程序间传送数据,而使用二维码真是一种较快捷的方法,也避免了蓝牙配对的混乱状况。
948 0
|
存储 .NET
asp.net 生成、解析条形码和二维码
原文 asp.net 生成、解析条形码和二维码 一、条形码 一维码,俗称条形码,广泛的用于电子工业等行业。比如我们常见的书籍背面就会有条形码,通过扫描枪等设备扫描就可以获得书籍的ISBN(International standard book number,国际标准书号)。
1334 0

热门文章

最新文章