using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Threading.Tasks; using Church.Net.DAL.EF; using Church.Net.Entity; using Church.Net.Utility; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Primitives; using QRCoder; using WebAPI.Logics.Interface; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace WebAPI.Controllers { [Route("[controller]/[action]")] [ApiController] public class BestController : ApiControllerBase { private readonly ICrudLogic logic; private readonly ICrudLogic groupLogic; private readonly ICrudLogic weekLogic; public BestController( ICrudLogic logic, ICrudLogic groupLogic, ICrudLogic weekLogic ) : base(logic) { this.logic = logic; this.groupLogic = groupLogic; this.weekLogic = weekLogic; } // GET api//5 public override Task> GetAll() { return base.GetAll(); } public override Task GetById(string id) { return Task.Run(() => { var best = logic.GetById(id); best.HappinessGroup = groupLogic.GetById(best.GroupId); best.HappinessGroup.Weeks = weekLogic.GetAll(w => w.GroupId == best.GroupId).OrderBy(w=>w.SEQ).ToList(); return best; }); } [HttpGet()] public async Task GetInvitationQRcode(string id) { QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode($"http://happiness.tours/invitation/{id}", QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); Bitmap qrCodeImage = qrCode.GetGraphic(3); string qrCodeImagePath = ServerUtils.MapPath("App_Data/ScaneMeQrCode.png"); var backgroundBitmap = (Bitmap)Bitmap.FromFile(qrCodeImagePath); //string qrCodeImagePath = Environment.GetEnvironmentVariable("AppData"); //HttpContext.Current.Server.MapPath("~/App_Data/"); //var fullPath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/App_Data/ScaneMeQrCode.png"); //System.Web.Hosting.HostingEnvironment.MapPath(@"~/App_Data/yourXmlFile.xml"); int positionLeft = 0; int positionTop = 0; var best = logic.GetById(id); if (best != null) { using (var memoryStream = new MemoryStream()) { //fileStream.CopyTo(memoryStream); Bitmap image = Superimpose(best.Name, backgroundBitmap, qrCodeImage, 10, 32); image.Scalling(75).Save(memoryStream, ImageFormat.Png); byte[] byteImage = memoryStream.ToArray(); return File(byteImage, "image/png"); } } return this.NotFound(); } [NonAction] public Bitmap Superimpose(string bestName, Bitmap largeBmp, Bitmap smallBmp, int? x = null, int? y = null) { Graphics g = Graphics.FromImage(largeBmp); g.CompositingMode = CompositingMode.SourceOver; smallBmp.MakeTransparent(); int margin = 5; if (!x.HasValue) { x = largeBmp.Width - smallBmp.Width - margin; } if (!y.HasValue) { y = largeBmp.Height - smallBmp.Height - margin; } var scale = 0.8; var scaleWidth = (int)(smallBmp.Width * scale); var scaleHeight = (int)(smallBmp.Height * scale); g.DrawImage(smallBmp, new Rectangle(x.Value, y.Value, scaleWidth, scaleHeight)); g.DrawString(bestName, new Font(new FontFamily("Arial"), 12), new SolidBrush(System.Drawing.Color.Black), 10, 0); return largeBmp; } } }