最近做了有关二维码的开发,发现网上多是用ThoughtWorks.QRCode和QrCode.Net两种方式。在参考官网时模仿写了两个Demo,其中ThoughtWorks.QRCode的功能更多,但是dll文件大小为6M,QrCode.Net大小为400K左右,搜集整理了网上的有关资料,如下:

      1、ThoughtWorks.QRCode:

     

 1 private void CreateQrcode(string nr)
 2         {
 3 
 4             Bitmap bt;
 5 
 6             string enCodeString = nr;
 7 
 8             QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
 9 
10             bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
11 
12             string filename = DateTime.Now.ToString("yyyymmddhhmmss");
13 
14             string path = Server.MapPath("~/image/") + filename + ".jpg";
15 
16             Response.Write(path);
17 
18             bt.Save(path);
19 
20             this.Image1.ImageUrl = "~/image/" + filename + ".jpg";
21 
22         }

      2、QrCode.Net:

 1 protected void Button1_Click(object sender, EventArgs e)
 2         {
 3             using (var ms = new MemoryStream())
 4             {
 5                 string stringtest = "中国inghttp://www.baidu.com/mvc.test?&";
 6                 GetQRCode(stringtest, ms);
 7                 Response.ContentType = "image/Png";
 8                 Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
 9 
10                 Image img = Image.FromStream(ms);
11                 string filename = DateTime.Now.ToString("yyyymmddhhmmss");
12                 string path = Server.MapPath("~/image/") + filename + ".png";
13                 img.Save(path);
14 
15                 Response.End();
16 
17             }  
18 
19         }
20 
21 
22         /// <summary>
23 
24         /// 获取二维码
25 
26         /// </summary>
27 
28         /// <param name="strContent">待编码的字符</param>
29 
30         /// <param name="ms">输出流</param>
31 
32         ///<returns>True if the encoding succeeded, false if the content is empty or too large to fit in a QR code</returns>
33 
34         public static bool GetQRCode(string strContent, MemoryStream ms)
35 
36         {
37 
38             ErrorCorrectionLevel Ecl = ErrorCorrectionLevel.M; //误差校正水平 
39 
40             string Content = strContent;//待编码内容
41 
42             QuietZoneModules QuietZones = QuietZoneModules.Two;  //空白区域 
43 
44             int ModuleSize = 12;//大小
45 
46             var encoder = new QrEncoder(Ecl);
47 
48             QrCode qr;
49 
50             if (encoder.TryEncode(Content, out qr))//对内容进行编码,并保存生成的矩阵
51 
52             {
53 
54                 var render = new GraphicsRenderer(new FixedModuleSize(ModuleSize, QuietZones));
55 
56                 render.WriteToStream(qr.Matrix, ImageFormat.Png, ms);
57 
58             }
59 
60             else
61 
62             {
63 
64                 return false;
65 
66             }
67 
68             return true;
69 
70         }

      需要源码的朋友svn下载路径为:

     http://code.taobao.org/svn/QrCodeDemo

posted on 2016-09-22 11:16  程序媛Kasey  阅读(317)  评论(0)    收藏  举报