QrCodeNet下載地址:http://qrcodenet.codeplex.com/
1 using System.Drawing;
2 using System.Drawing.Imaging;
3 using System.IO;
4 using Gma.QrCodeNet.Encoding;
5 using Gma.QrCodeNet.Encoding.Windows.Render;
6
7 namespace QRCodeTest
8 {
9 public class QRCodeHelper
10 {
11 /// <summary>
12 /// 生成二維碼
13 /// </summary>
14 /// <param name="content">內容</param>
15 /// <param name="moduleSize">二維碼的大小</param>
16 /// <returns>輸出流</returns>
17 public static MemoryStream GetQRCode(string content, int moduleSize = 9)
18 {
19 //ErrorCorrectionLevel 誤差校正水平
20 //QuietZoneModules 空白區域
21
22 var encoder = new QrEncoder(ErrorCorrectionLevel.M);
23 QrCode qrCode = encoder.Encode(content);
24 GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(moduleSize, QuietZoneModules.Two) , Brushes.Black, Brushes.White);
25
26 MemoryStream memoryStream = new MemoryStream();
27 render.WriteToStream(qrCode.Matrix, ImageFormat.Jpeg, memoryStream);
28
29 return memoryStream;
30
31 //生成圖片的代碼
32 //DrawingSize dSize = render.SizeCalculator.GetSize(qrCode.Matrix.Width);
33 //Bitmap map = new Bitmap(dSize.CodeWidth, dSize.CodeWidth);
34 //Graphics g = Graphics.FromImage(map);
35 //render.Draw(g, qrCode.Matrix);
36 //map.Save(fileName, ImageFormat.Jpeg);//fileName為存放的圖片路徑
37 }
38
39 /// <summary>
40 /// 生成帶Logo二維碼
41 /// </summary>
42 /// <param name="content">內容</param>
43 /// <param name="iconPath">logo路徑</param>
44 /// <param name="moduleSize">二維碼的大小</param>
45 /// <returns>輸出流</returns>
46 public static MemoryStream GetQRCode(string content, string iconPath, int moduleSize = 9)
47 {
48 QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.M);
49 QrCode qrCode = qrEncoder.Encode(content);
50
51 GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(moduleSize, QuietZoneModules.Two), Brushes.Black, Brushes.White);
52
53 DrawingSize dSize = render.SizeCalculator.GetSize(qrCode.Matrix.Width);
54 Bitmap map = new Bitmap(dSize.CodeWidth, dSize.CodeWidth);
55 Graphics g = Graphics.FromImage(map);
56 render.Draw(g, qrCode.Matrix);
57
58 //追加Logo圖片 ,注意控制Logo圖片大小和二維碼大小的比例
59 //PS:追加的圖片過大超過二維碼的容錯率會導致信息丟失,無法被識別
60 Image img = Image.FromFile(iconPath);
61
62 Point imgPoint = new Point((map.Width - img.Width) / 2, (map.Height - img.Height) / 2);
63 g.DrawImage(img, imgPoint.X, imgPoint.Y, img.Width, img.Height);
64
65 MemoryStream memoryStream = new MemoryStream();
66 map.Save(memoryStream, ImageFormat.Jpeg);
67
68 return memoryStream;
69
70 //生成圖片的代碼: map.Save(fileName, ImageFormat.Jpeg);//fileName為存放的圖片路徑
71 }
72 }
73 }
Controller:
1 public ActionResult CreateQrCode()
2 {
3 string str = "http://cn.bing.com/search?q=C%23";
4 using (var memoryStream = QRCodeHelper.GetQRCode(str, Server.MapPath(@"~/images/logo.jpg")))
5 {
6 Response.ContentType = "image/jpeg";
7 Response.OutputStream.Write(memoryStream.GetBuffer(), 0, (int)ms.Length);
8 Response.End();
9 }
10 return null;
11 }
View:
1 <img id="qrcode" src="@Url.Action("createqrcode")" />
效果如下:
