天天看點

[ASP.NET]二維碼的建立 效果圖 了解QR碼 項目解析

<a href="http://weibo.com/dingxiaowei2013" target="_blank">更多精彩教程請關注我的微網誌</a>

[ASP.NET]二維碼的建立 效果圖 了解QR碼 項目解析
[ASP.NET]二維碼的建立 效果圖 了解QR碼 項目解析
[ASP.NET]二維碼的建立 效果圖 了解QR碼 項目解析

主要的就是這個方法是用來生成一張二維碼圖檔的,其中this.calQrcode(encoding.GetBytes(content))這個方法是生成二維碼對應圖檔的一個bool數組,然後就是通過這個0,1數組來繪制成二維碼

[ASP.NET]二維碼的建立 效果圖 了解QR碼 項目解析

publicvirtual 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 &lt; flagArray.Length; i++)  

   {  

for (int j = 0; j &lt; flagArray.Length; j++)  

       {  

if (flagArray[j][i])  

           {  

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

           }  

       }  

   }  

return image;  

}  

[ASP.NET]二維碼的建立 效果圖 了解QR碼 項目解析

這裡主要是用到

建立.NET應用程式

Default.aspx

&lt;%@ Page Language="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

&lt;htmlxmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;headrunat="server"&gt;

&lt;title&gt;無标題頁&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;formid="form1"runat="server"&gt;

&lt;div&gt;

       請輸入内容:&lt;asp:TextBoxID="TextBox1"runat="server"&gt;&lt;/asp:TextBox&gt;

&lt;br/&gt;

       生成的檔案夾名稱:&lt;asp:TextBoxID="TextBox2"runat="server"&gt;&lt;/asp:TextBox&gt;

       生成的二維碼名稱:&lt;asp:TextBoxID="TextBox3"runat="server"&gt;&lt;/asp:TextBox&gt;

&lt;asp:LabelID="Label1"runat="server"Text=""&gt;&lt;/asp:Label&gt;

&lt;asp:ButtonID="Button1"runat="server"Text="生成二維碼"onclick="Button1_Click"/&gt;

&lt;/div&gt;

&lt;ahref="http://blog.csdn.net/dingxiaowei2013"&gt;項目解析&lt;/a&gt;

&lt;/form&gt;

&lt;/body&gt;

&lt;/html&gt;

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  

protectedvoid Page_Load(object sender, EventArgs e)  

protectedvoid 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 &lt; MStream.ToArray().Length; i++)  

               bw.Write(by[i]);  

           fs.Close();  

else

           Label1.Text = "該圖檔已經存在";  

本文轉蓬萊仙羽 51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1390756,如需轉載請自行聯系原作者

繼續閱讀