C# 生成帶二維碼的海報
阿新 • • 發佈:2021-12-14
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, stringqrcodeurl) 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 }