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         }

 

posted @ 2021-12-14 17:57  高长缨  阅读(326)  评论(0)    收藏  举报