using Microsoft.AspNetCore.Mvc; using NLog; using SkiaSharp; using Svg; using Svg.Skia; using System.Drawing; using WebDoorCreator.Data.Services; #if false using SkiaSharp; using Svg.Skia; #endif namespace WebDoorCreator.API.Controllers { [Route("api/[controller]")] [ApiController] public class DoorImageController : ControllerBase { #region Public Constructors public DoorImageController(IConfiguration configuration, QueueDataService DataService) { Log.Info("Starting DoorImageController"); _configuration = configuration; QDataServ = DataService; Log.Info("Avviato DoorImageController"); } #endregion Public Constructors #region Public Methods // GET: api/Alive [HttpGet] public string Get() { return "OK"; } [HttpGet("GetImage.png")] public async Task GetImagePng(int DoorId) { byte[] result = new byte[0]; string svgContent = await QDataServ.DoorGetLastSvg(DoorId); if (!string.IsNullOrEmpty(svgContent)) { using (var svg = new SKSvg()) { if (svg.FromSvg(svgContent) is { }) { using (var stream = new MemoryStream()) { svg.Picture?.ToImage(stream, SKColors.Empty, SKEncodedImageFormat.Png, 100, 1f, 1f, SKColorType.Rgba8888, SKAlphaType.Unpremul, SKColorSpace.CreateSrgb()); result = stream.ToArray(); } } } #if false var mySvg = SvgDocument.FromSvg(svgContent); //result = System.Text.Encoding.UTF8.GetBytes(svgContent); var myBmp = mySvg.Draw(); using (var stream = new MemoryStream()) { img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); result= stream.ToArray(); } #endif } return File(result, "image/png"); } [HttpGet("GetImage.svg")] public async Task GetImageSvg(int DoorId) { string svgContent = await QDataServ.DoorGetLastSvg(DoorId); var result = System.Text.Encoding.UTF8.GetBytes(svgContent); return File(result, "image/svg+xml"); } #endregion Public Methods #region Private Fields private static IConfiguration _configuration = null!; private static Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields #region Private Properties private QueueDataService QDataServ { get; set; } = null!; #endregion Private Properties #region Private Methods #endregion Private Methods } }