123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Collections;
- using System.IO;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Data;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Options;
- using Microsoft.AspNetCore.Http;
- using FMSAdmin.Models;
- using FMSAdmin.Entities;
- using System.Drawing;
- using System.Drawing.Imaging;
- using QRCoder;
- namespace FMSAdmin.Helpers {
- public class QrCodeHelper {
- private readonly AppSettings _appSettings;
- private readonly StorageHelper _storageHelper;
- private readonly ILogger<QrCodeHelper> _logger;
- public QrCodeHelper(
- IOptions<AppSettings> appSettings,
- ILogger<QrCodeHelper> logger,
- StorageHelper storageHelper
- ) {
- _appSettings = appSettings.Value;
- _logger = logger;
- _storageHelper = storageHelper;
- var currentDir = _appSettings.StoragePath;
- Directory.CreateDirectory(currentDir + "/wwwroot/files/temp/qr");
- Directory.CreateDirectory(currentDir + "/wwwroot/files/qr");
- }
- //QR 생성전 임시 폴더 생성
- public string CreateBaseDir(string folder) {
- string folderPath = _appSettings.StoragePath + "/wwwroot/files/temp/qr/" + folder;
- if (!Directory.Exists(folderPath)) {
- Directory.CreateDirectory(folderPath);
- }
- return _appSettings.StorageUrl;
- }
- //QR 이미지 생성
- public void Save(string code, string id, string group = "") {
- if (string.IsNullOrEmpty(group)) {
- group = "default";
- }
- if (!_storageHelper.DirectoryExists($"/qr/{group}")) {
- _storageHelper.CreateDirectory($"/qr/{group}");
- }
- var path = $"/qr/{group}/{id}.jpg";
- var dispCdoe = code.Length > 11 ? code.Substring(0, 11) : code;
- QRCodeGenerator qrGenerator = new QRCodeGenerator();
- QRCodeData qrCodeData = qrGenerator.CreateQrCode(code, QRCodeGenerator.ECCLevel.Q);
- QRCode qrCode = new QRCode(qrCodeData);
- Bitmap qrCodeImage = qrCode.GetGraphic(12);
- Bitmap baseBitmap = new Bitmap(357, 357);
- Graphics g = Graphics.FromImage(baseBitmap);
- g.FillRectangle(Brushes.White, 0, 0, baseBitmap.Width, baseBitmap.Height);
- Brush blackBrush = new SolidBrush(Color.Black); // FontColor
- FontFamily familyName = new FontFamily("굴림"); // FontFamily
- System.Drawing.Font myFont = new System.Drawing.Font(familyName, 30, FontStyle.Bold, GraphicsUnit.Pixel);// 폰트생성
- PointF startPoint = new PointF(70, 310); // 글자 시작위치
- g.DrawImage(qrCodeImage, new Point(5, 0));
- g.DrawString(dispCdoe, myFont, blackBrush, startPoint);
- _logger.LogInformation("저장:" + _storageHelper.GetLocalPath(path));
- baseBitmap.Save(_storageHelper.GetLocalPath(path), System.Drawing.Imaging.ImageFormat.Jpeg);
- }
- //QR 이미지 생성
- /*
- public void QrGenerate(string code, string folder) {
- var folderPath = _appSettings.StoragePath + "/wwwroot/files/temp/qr/" + folder;
- var dispCdoe = code.Length > 11 ? code.Substring(0, 11) : code;
- QRCodeGenerator qrGenerator = new QRCodeGenerator();
- QRCodeData qrCodeData = qrGenerator.CreateQrCode(code, QRCodeGenerator.ECCLevel.Q);
- QRCode qrCode = new QRCode(qrCodeData);
- Bitmap qrCodeImage = qrCode.GetGraphic(12);
- Bitmap baseBitmap = new Bitmap(357, 357);
- Graphics g = Graphics.FromImage(baseBitmap);
- g.FillRectangle(Brushes.White, 0, 0, baseBitmap.Width, baseBitmap.Height);
- Brush blackBrush = new SolidBrush(Color.Black); // FontColor
- FontFamily familyName = new FontFamily("굴림"); // FontFamily
- System.Drawing.Font myFont = new System.Drawing.Font(familyName, 30, FontStyle.Bold, GraphicsUnit.Pixel);// 폰트생성
- PointF startPoint = new PointF(70, 310); // 글자 시작위치
- g.DrawImage(qrCodeImage, new Point(5, 0));
- g.DrawString(dispCdoe, myFont, blackBrush, startPoint);
- baseBitmap.Save(folderPath + "/" + code + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
- }
- */
- //폴더 압축
- public bool FileCompress(string folder, string filename) {
- bool bRet = false;
- var folderPath = _appSettings.StoragePath + "/wwwroot/files/temp/qr/";
- try {
- System.IO.Compression.ZipFile.CreateFromDirectory(folderPath + folder, folderPath + filename + ".zip");
- bRet = true;
- } catch (Exception ex) {
- _logger.LogError(ex, "");
- }
- return bRet;
- }
- // 폴더 삭제
- public void FolderDelete(string folder) {
- var folderPath = _appSettings.StoragePath + "/wwwroot/files/temp/qr/";
- //Directory dir = new Directory(folderPath);
- System.IO.Directory.Delete(folderPath + folder, true);
- }
- private static byte[] BitmapToBytes(Bitmap img) {
- using (MemoryStream stream = new MemoryStream()) {
- img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
- return stream.ToArray();
- }
- }
- }
- }
|