1. 程式人生 > 其它 >C# 生成帶二維碼的海報

C# 生成帶二維碼的海報

 1      /// <summary>
 2         /// 生成帶二維碼的海報
 3         /// </summary>
 4         /// <param name="haibao">背景海報地址</param>
 5         /// <param name="qrcodeurl">生成二維碼的連結</param>
 6         /// <returns></returns>
 7 
 8         public string DrawHaiBao(string haibao, string
qrcodeurl) 9 { 10 string newpath = ""; 11 12 //背景圖 13 System.Drawing.Image imgSrc = System.Drawing.Image.FromStream(System.Net.WebRequest.Create(haibao).GetResponse().GetResponseStream()); 14 15 //二維碼圖片 16 Image qrCodeImage = QRCodeHelper.BuildQRCode(qrcodeurl);
17        //處理頭像圖片大小 100*100px 18 Image titleImage = QRCodeHelper.ReduceImage(item.Result.headimgurl, 100, 100); 19 20 21 using (Graphics g = Graphics.FromImage(imgSrc)) 22 { 23 //畫專屬推廣二維碼 24 g.DrawImage(qrCodeImage, new Rectangle(432, 25 1270
, 26 qrCodeImage.Width, 27 qrCodeImage.Height), 28 0, 0, qrCodeImage.Width, qrCodeImage.Height, GraphicsUnit.Pixel); 29           //畫頭像 30 g.DrawImage(titleImage, 30, 50, titleImage.Width, titleImage.Height); 31 32 Font font = new Font("宋體",18, FontStyle.Bold); 33 34 g.DrawString(item.Result.nickname, font, new SolidBrush(Color.White), 220, 50); 35 36 } 37 38 string path11 = $"/img/{Guid.NewGuid().ToString("N")}" + ".jpg"; 39 string physicPath = GetAbsolutePath($"~{path11}"); 40 string dir = Path.GetDirectoryName(physicPath); 41 if (!Directory.Exists(dir)) 42 Directory.CreateDirectory(dir); 43 newpath = $"{_configuration["WebRootUrl"]}{path11}"; 44 string ppth = _hostingEnvironment.WebRootPath + path11; 45 46 imgSrc.Save(ppth, System.Drawing.Imaging.ImageFormat.Jpeg); 47 48 return newpath; 49 }

QRCodeHelper: 二維碼生成幫助類

 1      /// <summary>
 2         /// 生成二維碼,預設邊長為250px
 3         /// </summary>
 4         /// <param name="content">二維碼內容</param>
 5         /// <returns></returns>
 6         public static Image BuildQRCode(string content)
 7         {
 8             return BuildQRCode(content, 250, Color.White, Color.Black);
 9         }
10 
11         /// <summary>
12         /// 生成二維碼,自定義邊長
13         /// </summary>
14         /// <param name="content">二維碼內容</param>
15         /// <param name="imgSize">二維碼邊長px</param>
16         /// <returns></returns>
17         public static Image BuildQRCode(string content, int imgSize)
18         {
19             return BuildQRCode(content, imgSize, Color.White, Color.Black);
20         }
21 
22         /// <summary>
23         /// 生成二維碼
24         /// 注:自定義邊長以及顏色
25         /// </summary>
26         /// <param name="content">二維碼內容</param>
27         /// <param name="imgSize">二維碼邊長px</param>
28         /// <param name="background">二維碼底色</param>
29         /// <param name="foreground">二維碼前景色</param>
30         /// <returns></returns>
31         public static Image BuildQRCode(string content, int imgSize, Color background, Color foreground)
32         {
33             return BuildQRCode_Logo(content, imgSize, background, foreground, null);
34         }
35 
36         /// <summary>
37         /// 生成二維碼並新增Logo
38         /// 注:預設生成邊長為250px的二維碼
39         /// </summary>
40         /// <param name="content">二維碼內容</param>
41         /// <param name="logo">logo圖片</param>
42         /// <returns></returns>
43         public static Image BuildQRCode_Logo(string content, Bitmap logo)
44         {
45             return BuildQRCode_Logo(content, 250, Color.White, Color.Black, logo);
46         }
47 
48         /// <summary>
49         /// 生成二維碼並新增Logo
50         /// 注:自定義邊長
51         /// </summary>
52         /// <param name="content">二維碼內容</param>
53         /// <param name="imgSize">二維碼邊長px</param>
54         /// <param name="logo">logo圖片</param>
55         /// <returns></returns>
56         public static Image BuildQRCode_Logo(string content, int imgSize, Bitmap logo)
57         {
58             return BuildQRCode_Logo(content, imgSize, Color.White, Color.Black, logo);
59         }
60 
61         /// <summary>
62         /// 生成二維碼並新增Logo
63         /// 注:自定義邊長以及顏色
64         /// </summary>
65         /// <param name="content">二維碼內容</param>
66         /// <param name="imgSize">二維碼邊長px</param>
67         /// <param name="background">二維碼底色</param>
68         /// <param name="foreground">二維碼前景色</param>
69         /// <param name="logo">logo圖片</param>
70         /// <returns></returns>
71         public static Image BuildQRCode_Logo(string content, int imgSize, Color background, Color foreground, Bitmap logo)
72         {
73             QRCodeGenerator qrGenerator = new QRCodeGenerator();
74             QRCodeData qrCodeData = qrGenerator.CreateQrCode(content, QRCodeGenerator.ECCLevel.Q);
75             QRCode qrCode = new QRCode(qrCodeData);
76             var ppm = imgSize / qrCodeData.ModuleMatrix.Count;
77             Bitmap qrCodeImage = qrCode.GetGraphic(ppm, foreground, background, logo);
78 
79             return qrCodeImage;
80         }