QrCodeHelper.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. using System.IO;
  7. using System.Runtime.Serialization.Formatters.Binary;
  8. using System.Data;
  9. using Microsoft.Extensions.Logging;
  10. using Microsoft.Extensions.Options;
  11. using Microsoft.AspNetCore.Http;
  12. using FMSAdmin.Models;
  13. using FMSAdmin.Entities;
  14. using System.Drawing;
  15. using System.Drawing.Imaging;
  16. using QRCoder;
  17. namespace FMSAdmin.Helpers {
  18. public class QrCodeHelper {
  19. private readonly AppSettings _appSettings;
  20. private readonly StorageHelper _storageHelper;
  21. private readonly ILogger<QrCodeHelper> _logger;
  22. public QrCodeHelper(
  23. IOptions<AppSettings> appSettings,
  24. ILogger<QrCodeHelper> logger,
  25. StorageHelper storageHelper
  26. ) {
  27. _appSettings = appSettings.Value;
  28. _logger = logger;
  29. _storageHelper = storageHelper;
  30. var currentDir = _appSettings.StoragePath;
  31. Directory.CreateDirectory(currentDir + "/wwwroot/files/temp/qr");
  32. Directory.CreateDirectory(currentDir + "/wwwroot/files/qr");
  33. }
  34. //QR 생성전 임시 폴더 생성
  35. public string CreateBaseDir(string folder) {
  36. string folderPath = _appSettings.StoragePath + "/wwwroot/files/temp/qr/" + folder;
  37. if (!Directory.Exists(folderPath)) {
  38. Directory.CreateDirectory(folderPath);
  39. }
  40. return _appSettings.StorageUrl;
  41. }
  42. //QR 이미지 생성
  43. public void Save(string code, string id, string group = "") {
  44. if (string.IsNullOrEmpty(group)) {
  45. group = "default";
  46. }
  47. if (!_storageHelper.DirectoryExists($"/qr/{group}")) {
  48. _storageHelper.CreateDirectory($"/qr/{group}");
  49. }
  50. var path = $"/qr/{group}/{id}.jpg";
  51. var dispCdoe = code.Length > 11 ? code.Substring(0, 11) : code;
  52. QRCodeGenerator qrGenerator = new QRCodeGenerator();
  53. QRCodeData qrCodeData = qrGenerator.CreateQrCode(code, QRCodeGenerator.ECCLevel.Q);
  54. QRCode qrCode = new QRCode(qrCodeData);
  55. Bitmap qrCodeImage = qrCode.GetGraphic(12);
  56. Bitmap baseBitmap = new Bitmap(357, 357);
  57. Graphics g = Graphics.FromImage(baseBitmap);
  58. g.FillRectangle(Brushes.White, 0, 0, baseBitmap.Width, baseBitmap.Height);
  59. Brush blackBrush = new SolidBrush(Color.Black); // FontColor
  60. FontFamily familyName = new FontFamily("굴림"); // FontFamily
  61. System.Drawing.Font myFont = new System.Drawing.Font(familyName, 30, FontStyle.Bold, GraphicsUnit.Pixel);// 폰트생성
  62. PointF startPoint = new PointF(70, 310); // 글자 시작위치
  63. g.DrawImage(qrCodeImage, new Point(5, 0));
  64. g.DrawString(dispCdoe, myFont, blackBrush, startPoint);
  65. _logger.LogInformation("저장:" + _storageHelper.GetLocalPath(path));
  66. baseBitmap.Save(_storageHelper.GetLocalPath(path), System.Drawing.Imaging.ImageFormat.Jpeg);
  67. }
  68. //QR 이미지 생성
  69. /*
  70. public void QrGenerate(string code, string folder) {
  71. var folderPath = _appSettings.StoragePath + "/wwwroot/files/temp/qr/" + folder;
  72. var dispCdoe = code.Length > 11 ? code.Substring(0, 11) : code;
  73. QRCodeGenerator qrGenerator = new QRCodeGenerator();
  74. QRCodeData qrCodeData = qrGenerator.CreateQrCode(code, QRCodeGenerator.ECCLevel.Q);
  75. QRCode qrCode = new QRCode(qrCodeData);
  76. Bitmap qrCodeImage = qrCode.GetGraphic(12);
  77. Bitmap baseBitmap = new Bitmap(357, 357);
  78. Graphics g = Graphics.FromImage(baseBitmap);
  79. g.FillRectangle(Brushes.White, 0, 0, baseBitmap.Width, baseBitmap.Height);
  80. Brush blackBrush = new SolidBrush(Color.Black); // FontColor
  81. FontFamily familyName = new FontFamily("굴림"); // FontFamily
  82. System.Drawing.Font myFont = new System.Drawing.Font(familyName, 30, FontStyle.Bold, GraphicsUnit.Pixel);// 폰트생성
  83. PointF startPoint = new PointF(70, 310); // 글자 시작위치
  84. g.DrawImage(qrCodeImage, new Point(5, 0));
  85. g.DrawString(dispCdoe, myFont, blackBrush, startPoint);
  86. baseBitmap.Save(folderPath + "/" + code + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
  87. }
  88. */
  89. //폴더 압축
  90. public bool FileCompress(string folder, string filename) {
  91. bool bRet = false;
  92. var folderPath = _appSettings.StoragePath + "/wwwroot/files/temp/qr/";
  93. try {
  94. System.IO.Compression.ZipFile.CreateFromDirectory(folderPath + folder, folderPath + filename + ".zip");
  95. bRet = true;
  96. } catch (Exception ex) {
  97. _logger.LogError(ex, "");
  98. }
  99. return bRet;
  100. }
  101. // 폴더 삭제
  102. public void FolderDelete(string folder) {
  103. var folderPath = _appSettings.StoragePath + "/wwwroot/files/temp/qr/";
  104. //Directory dir = new Directory(folderPath);
  105. System.IO.Directory.Delete(folderPath + folder, true);
  106. }
  107. private static byte[] BitmapToBytes(Bitmap img) {
  108. using (MemoryStream stream = new MemoryStream()) {
  109. img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
  110. return stream.ToArray();
  111. }
  112. }
  113. }
  114. }