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

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

效果图

了解QR码

项目解析

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

a)生成图片方法

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

  1. public virtual 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数组方法以及原理

这里主要是用到

创建.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. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <title>无标题页</title>
  6. </head>
  7. <body>
  8. <form id="form1" runat="server">
  9. <div>
  10. 请输入内容:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  11. <br />
  12. 生成的文件夹名称:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
  13. <br/>
  14. 生成的二维码名称:<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
  15. <br/>
  16. <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
  17. <br/>
  18. <asp:Button ID="Button1" runat="server" Text="生成二维码" onclick="Button1_Click" />
  19. </div>
  20. <div>
  21. <a href="http://blog.csdn.net/dingxiaowei2013">项目解析</a>
  22. </div>
  23. </form>
  24. </body>
  25. </html>

Default.aspx.cs

    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. protected void Page_Load(object sender, EventArgs e)
    9. {
    10. }
    11. protected void 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. }
    62. }

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

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

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

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

[.NET]二维码生成的更多相关文章

  1. [开源]C#二维码生成解析工具,可添加自定义Logo

    二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...

  2. 聊聊 Web 项目二维码生成的最佳姿势

    在设计和实现的过程之后,你永远不知道部署上去的程序会已什么样的姿势运行. 本篇借一次生成二维码逻辑的不同实现,阐述 Web 项目中二维码生成的正确姿势. 文中如有批量,欢迎各位看客老爷拍砖.试运行前5 ...

  3. .NET 二维码生成(ThoughtWorks.QRCode)

    引用ThoughtWorks.QRCode.dll (源代码里有) 1.简单二维码生成及解码代码: //生成二维码方法一 private void CreateCode_Simple(string n ...

  4. iOS开发 二维码生成

    基于libqrencode的二维码生成 + (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size { ...

  5. PHP二维码生成的方法(google APi,PHP类库,libqrencode等)

    原文地址: http://blog.csdn.net/liuxinmingcode/article/details/7910975 ================================== ...

  6. Android 二维码 生成和识别(附Demo源码)

    今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS. Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技 ...

  7. Chrome浏览器二维码生成插件

      猛击就可以使用啦->>>猛击使用   源码如下: 源码打包   源码: jquery-2.1.3.min.js jquery.qrcode.min.js https://gith ...

  8. Android 二维码 生成和识别(转)

    原博客地址 :http://www.cnblogs.com/weixing/archive/2013/08/28/3287120.html 还有几个写的也可以参考一下:http://www.itnos ...

  9. wex5 实战 二维码生成,扫描,蓝牙打印

    给人设计了一个小模块,要求是,把一个单号生成二维码,实现扫描查询单号具体信息,并能通过蓝牙把二维码打印出来.功能实现并不复杂,今天一口气把它搞定.来看效果. 一   效果演示: 二.二维码生成 1 在 ...

  10. atitit.二维码生成总结java zxing

    atitit.二维码生成总结java zxing #-----zxing类库.. but zxing3.0  的类库core-3.0.jar 需要jdk7 只好zing2.2.jar ..jdk6走o ...

随机推荐

  1. 第六章 大数据,6.3 突破传统,4k大屏的沉浸式体验(作者: 彦川、小丛)

    6.3 突破传统,4k大屏的沉浸式体验 前言 能够在 4K 的页面上表演,对设计师和前端开发来说,即是机会也是挑战,我们可以有更大的空间设计宏观的场景,炫酷的转场,让观众感受影院式视觉体验,但是,又必 ...

  2. 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇

    原发表于ESRI中国社区,转过来.我的社区帐号:jhlong http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=122097 ----------- ...

  3. ArcGIS Server开发教程系列(2)配置ARCMAP和ARCCatalog发布服务

    1.       Arc catalog的配置 打开catalog,如图新增刚刚创建的server 1. Use GIS services: 用户身份连接 使用此种连接,可以浏览.使用站点内发布的所有 ...

  4. Python之路【第十九篇】自定义分页实现(模块化)

    自定义分页 1.目的&环境准备 目的把分页写成一个模块的方式然后在需要分页的地方直接调用模块就行了. 环境准备Django中生成一个APP并且注册,配置URL&Views 配置URL ...

  5. LYDSY模拟赛day1 String Master

    /* 暴力枚举两个后缀,计算最长能匹配多少前缀. 最优策略一定是贪心改掉前 k 个失配的字符. 时间复杂度 O(n3). */ #include<cstdio> ],b[]; int ma ...

  6. PHP中spl_autoload_register()函数的用法

    spl_autoload_register (PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明 bool spl_autol ...

  7. 第3月第13天 cpp模版 Iterator模式 proactor

    1.模版除了传参,还可以自动创建.而传指针只是传参而已. template <class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_P ...

  8. MySQL 视图

    一.视图是一种虚拟存在的表,并不在数据库中实际存在.数据来自于视频中查询使用的表,在使用视图时动态生成的. 二.视图的优势: (A) 简单:已经是过滤好的复合条件的结果集 (B) 安全:表的权限不能限 ...

  9. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  10. Ubuntu 16.04 安装 Apache, MySQL, PHP7

    1.安装之前先更新系统 1 sudo apt update 2.安装Apache2 1 sudo apt install apache2 3.安装PHP 1 sudo apt install php ...