QRCodeHelper.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Drawing;
  5. using QRCoder;
  6. using System.IO;
  7. using System.Drawing.Imaging;
  8. namespace Toolkits
  9. {
  10. public class QRCodeHelper
  11. {
  12. /// <summary>
  13. /// 生成二维码图片
  14. /// </summary>
  15. /// <param name="str"></param>
  16. /// <returns></returns>
  17. public Bitmap CreateQRimg(string str)
  18. {
  19. QRCodeGenerator qrGenerator = new QRCodeGenerator();
  20. QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, QRCodeGenerator.ECCLevel.Q);
  21. QRCode qrCode = new QRCode(qrCodeData);
  22. Bitmap bt = qrCode.GetGraphic(20);
  23. return bt;
  24. }
  25. /// <summary>
  26. /// 生成二维码图片流(二维码上含文字)
  27. /// </summary>
  28. /// <param name="str1">二维码中要传递的数据(地址)</param>
  29. /// <param name="str2">二维码上显示的文字说明</param>
  30. public byte[] GenerateQRCode(string str1, string str2)
  31. {
  32. using (Image codeImage = CreateQRimg(str1), strImage = ConvertStringToImage(str2))
  33. {
  34. Image img = CombineImage(600, 600, codeImage, 60, 50, strImage, 0, 530);
  35. using (var stream = new MemoryStream())
  36. {
  37. img.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
  38. //输出图片流
  39. return stream.ToArray();
  40. }
  41. }
  42. }
  43. /// <summary>
  44. /// 生成二维码图片流(不含文字)
  45. /// </summary>
  46. /// <param name="str">二维码中要传递的数据(地址)</param>
  47. /// <returns></returns>
  48. public byte[] GenerateQRCode(string str)
  49. {
  50. using (Image codeImage = CreateQRimg(str))
  51. {
  52. using (var stream = new MemoryStream())
  53. {
  54. codeImage.Save(stream, ImageFormat.Jpeg);
  55. return stream.ToArray();
  56. }
  57. }
  58. }
  59. /// <summary>
  60. /// 生成文字图片
  61. /// </summary>
  62. /// <param name="str"></param>
  63. /// <returns></returns>
  64. public Image ConvertStringToImage(string str)
  65. {
  66. Bitmap image = new Bitmap(600, 40, PixelFormat.Format24bppRgb);
  67. Graphics g = Graphics.FromImage(image);
  68. try
  69. {
  70. Font font = new Font("SimHei", 14, FontStyle.Regular);
  71. g.Clear(Color.White);
  72. StringFormat format = new StringFormat();
  73. format.Alignment = StringAlignment.Center;
  74. format.LineAlignment = StringAlignment.Center;
  75. Rectangle rectangle = new Rectangle(0, 0, 600, 40);
  76. g.DrawString(str, font, new SolidBrush(Color.Black), rectangle, format);
  77. return image;
  78. }
  79. catch (Exception e)
  80. {
  81. throw e;
  82. }
  83. finally
  84. {
  85. GC.Collect();
  86. }
  87. }
  88. /// <summary>
  89. /// 在画板中合并二维码图片和文字图片
  90. /// </summary>
  91. /// <param name="width"></param>
  92. /// <param name="height"></param>
  93. /// <param name="imgLeft"></param>
  94. /// <param name="imgLeft_left"></param>
  95. /// <param name="imgLeft_top"></param>
  96. /// <param name="imgRight"></param>
  97. /// <param name="imgRight_left"></param>
  98. /// <param name="imgRight_top"></param>
  99. /// <returns></returns>
  100. public Image CombineImage(int width, int height, Image imgLeft, int imgLeft_left, int imgLeft_top, Image imgRight, int imgRight_left, int imgRight_top)
  101. {
  102. Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);
  103. Graphics g = Graphics.FromImage(image);
  104. try
  105. {
  106. g.Clear(Color.White);
  107. g.DrawImage(imgLeft, imgLeft_left, imgLeft_top, 500, 500);
  108. g.DrawImage(imgRight, imgRight_left, imgRight_top, imgRight.Width, imgRight.Height);
  109. return image;
  110. }
  111. catch (Exception e)
  112. {
  113. throw e;
  114. }
  115. finally
  116. {
  117. g.Dispose();
  118. }
  119. }
  120. }
  121. }