QRCode.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System;
  2. using System.Drawing;
  3. using System.Text;
  4. using ThoughtWorks.QRCode.Codec;
  5. using System.IO;
  6. namespace BaseLibQRCode
  7. {
  8. /// <summary>
  9. /// 生成二维码
  10. public class QRCodeController
  11. {
  12. /// <summary>
  13. /// 生成二维码
  14. /// </summary>
  15. /// <param name="enCodeString">要生成二维码的文字</param>
  16. /// <returns></returns>
  17. public Bitmap QRCode(string enCodeString)
  18. {
  19. Bitmap bt;
  20. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  21. qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
  22. qrCodeEncoder.QRCodeScale = 10;//大小(值越大生成的二维码图片像素越高)
  23. qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
  24. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)
  25. qrCodeEncoder.QRCodeBackgroundColor = Color.White;//背景色
  26. qrCodeEncoder.QRCodeForegroundColor = Color.Black;//前景色
  27. bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
  28. string filename = enCodeString;// "code";
  29. string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\\";
  30. string codeUrl = file_path + filename + ".jpg";
  31. //根据文件名称,自动建立对应目录
  32. if (!System.IO.Directory.Exists(file_path))
  33. {
  34. System.IO.Directory.CreateDirectory(file_path);
  35. }
  36. ////防止内容重复,导致名称重复问题,
  37. ////若要每次更新,可去掉本段代码 ↓↓↓↓↓
  38. //int i = 1;
  39. //while (System.IO.File.Exists(codeUrl))
  40. //{
  41. // string _filename = filename + "("+i+")";
  42. // codeUrl = file_path + _filename + ".jpg";
  43. // i++;
  44. //}
  45. //// ↑↑↑↑↑↑↑
  46. //bt.Save(codeUrl);//保存图片
  47. return bt;
  48. }
  49. /// <summary>
  50. /// 生成二维码【方法二】
  51. /// </summary>
  52. /// <param name="qrCodeScale">尺寸4-15</param>
  53. /// <param name="qrCodeVersion">复杂级别3-12</param>
  54. /// <param name="qrCodeErrorCorrect">容错量"H","L","M","Q"</param>
  55. /// <param name="enCodeString">二维码信息</param>
  56. /// <returns></returns>
  57. public string CreateEQcoder(int qrCodeScale, int qrCodeVersion, string qrCodeErrorCorrect, string enCodeString)
  58. {
  59. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  60. qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
  61. qrCodeEncoder.QRCodeScale = qrCodeScale;
  62. qrCodeEncoder.QRCodeVersion = qrCodeVersion;
  63. switch (qrCodeErrorCorrect)
  64. {
  65. case "H":
  66. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
  67. break;
  68. case "L":
  69. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
  70. break;
  71. case "M":
  72. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  73. break;
  74. case "Q":
  75. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
  76. break;
  77. }
  78. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
  79. Bitmap bmPhoto = qrCodeEncoder.Encode(enCodeString, System.Text.Encoding.GetEncoding("UTF-8"));
  80. string fileName = enCodeString + "_" + qrCodeScale + "_" + qrCodeVersion + "_" + qrCodeErrorCorrect;
  81. string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\\";
  82. string savePath = file_path + fileName + ".jpg";
  83. try
  84. {
  85. if (!Directory.Exists(file_path))
  86. {
  87. Directory.CreateDirectory(file_path);
  88. }
  89. //防止内容重复,导致名称重复问题,若要每次更新,可去掉本段代码 ↓↓↓↓↓
  90. int i = 1;
  91. while (System.IO.File.Exists(savePath))
  92. {
  93. string _filename = fileName + "(" + i + ")";
  94. savePath = file_path + _filename + ".jpg";
  95. i++;
  96. }
  97. //↑↑↑↑↑↑↑
  98. bmPhoto.Save(savePath);
  99. bmPhoto.Dispose();
  100. return savePath;
  101. }
  102. catch (Exception)
  103. {
  104. return "";
  105. }
  106. finally
  107. {
  108. bmPhoto.Dispose();
  109. }
  110. }
  111. }
  112. }