summary refs log tree commit diff
path: root/extra/admin-api/Spacebar.Cdn/Controllers/Internal/GetImageController.cs
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-03-11 00:58:13 +0100
committerRory& <root@rory.gay>2026-03-11 00:58:13 +0100
commitb40b5234f4cb3681bd9531d76c38111057f71733 (patch)
treeae238a01834f25871631b84d19141019c56c8f1b /extra/admin-api/Spacebar.Cdn/Controllers/Internal/GetImageController.cs
parentfix: fall back to undefined in message create (diff)
downloadserver-ts-github/dev/emma/gateway-batch-presence-lookup.tar.xz
Diffstat (limited to 'extra/admin-api/Spacebar.Cdn/Controllers/Internal/GetImageController.cs')
-rw-r--r--extra/admin-api/Spacebar.Cdn/Controllers/Internal/GetImageController.cs67
1 files changed, 40 insertions, 27 deletions
diff --git a/extra/admin-api/Spacebar.Cdn/Controllers/Internal/GetImageController.cs b/extra/admin-api/Spacebar.Cdn/Controllers/Internal/GetImageController.cs

index 404e6e29..f595fba9 100644 --- a/extra/admin-api/Spacebar.Cdn/Controllers/Internal/GetImageController.cs +++ b/extra/admin-api/Spacebar.Cdn/Controllers/Internal/GetImageController.cs
@@ -1,3 +1,4 @@ +using ArcaneLibs; using ArcaneLibs.Collections; using ImageMagick; using Microsoft.AspNetCore.Mvc; @@ -6,7 +7,7 @@ using Spacebar.Cdn.Extensions; using Spacebar.Interop.Cdn.Abstractions; namespace Spacebar.Cdn.Controllers.Internal; -/* + [ApiController] public class IsPixelArtController(LruFileCache lfc, IFileSource fs, PixelArtDetectionService pads, DiscordImageResizeService dirs) : ControllerBase { private static readonly LruCache<bool> _isPixelArtCache = new(100_000); @@ -20,7 +21,7 @@ public class IsPixelArtController(LruFileCache lfc, IFileSource fs, PixelArtDete return pads.IsPixelArt(img); }); } - + [HttpGet("/isCartoonArt/{*_:required}")] public async Task<bool> IsCartoonArt() { return await _isPixelArtCache.GetOrAddAsync(Request.Path.ToString(), async () => { @@ -34,18 +35,19 @@ public class IsPixelArtController(LruFileCache lfc, IFileSource fs, PixelArtDete public async Task<FileContentResult> GetEdges([FromQuery] string applyMode = "pre") { return await _edgeCache.GetOrAdd(Request.Path.ToString() + Request.QueryString, async () => { var original = await fs.GetFile(Request.Path.ToString().Replace("/edges", "")); - + DiscordImageResizeParams resizeParams = new() { Size = Request.Query.ContainsKey("size") && uint.TryParse(Request.Query["size"], out uint size) ? size : null, - Quality = Request.Query.ContainsKey("quality") && Enum.TryParse<DiscordImageResizeQuality>(Request.Query["quality"], true, out var quality) ? quality : DiscordImageResizeQuality.High, + Quality = Request.Query.ContainsKey("quality") && Enum.TryParse<DiscordImageResizeQuality>(Request.Query["quality"], true, out var quality) + ? quality + : DiscordImageResizeQuality.High, KeepAspectRatio = !Request.Query.ContainsKey("keepAspectRatio") || !bool.TryParse(Request.Query["keepAspectRatio"], out bool kar) || kar, Passthrough = Request.Query.ContainsKey("passthrough") && bool.TryParse(Request.Query["passthrough"], out bool pt) && pt, Animated = Request.Query.ContainsKey("animated") && bool.TryParse(Request.Query["animated"], out bool an) && an, SpacebarAllowUpscale = Request.Query.ContainsKey("allowUpscale") && bool.TryParse(Request.Query["allowUpscale"], out bool au) && au, SpacebarOptimiseGif = Request.Query.ContainsKey("optimiseGif") && bool.TryParse(Request.Query["optimiseGif"], out bool og) && og }; - - + double radius = 1; if (Request.Query.ContainsKey("radius")) double.TryParse(Request.Query["radius"], out radius); @@ -65,27 +67,27 @@ public class IsPixelArtController(LruFileCache lfc, IFileSource fs, PixelArtDete }; }).ContinueWith(t => File(t.Result.Data, t.Result.MimeType)); } - - [HttpGet("/posterize/{*_:required}")] + + [HttpGet("/posterize/{*_:required}")] public async Task<FileContentResult> Posterize() { return await _edgeCache.GetOrAdd(Request.Path.ToString() + Request.QueryString, async () => { var original = await fs.GetFile(Request.Path.ToString().Replace("/posterize", "")); DiscordImageResizeParams resizeParams = new() { Size = Request.Query.ContainsKey("size") && uint.TryParse(Request.Query["size"], out uint size) ? size : null, - Quality = Request.Query.ContainsKey("quality") && Enum.TryParse<DiscordImageResizeQuality>(Request.Query["quality"], true, out var quality) ? quality : DiscordImageResizeQuality.High, + Quality = Request.Query.ContainsKey("quality") && Enum.TryParse<DiscordImageResizeQuality>(Request.Query["quality"], true, out var quality) + ? quality + : DiscordImageResizeQuality.High, KeepAspectRatio = !Request.Query.ContainsKey("keepAspectRatio") || !bool.TryParse(Request.Query["keepAspectRatio"], out bool kar) || kar, Passthrough = Request.Query.ContainsKey("passthrough") && bool.TryParse(Request.Query["passthrough"], out bool pt) && pt, Animated = Request.Query.ContainsKey("animated") && bool.TryParse(Request.Query["animated"], out bool an) && an, SpacebarAllowUpscale = Request.Query.ContainsKey("allowUpscale") && bool.TryParse(Request.Query["allowUpscale"], out bool au) && au }; - - + double radius = 1; if (Request.Query.ContainsKey("radius")) double.TryParse(Request.Query["radius"], out radius); var img = await original.ToMagickImageCollectionAsync(); - int inFrames = img.Count; // using var edged = pads.RenderEdges(img, radius); foreach (var frame in img) { @@ -94,9 +96,9 @@ public class IsPixelArtController(LruFileCache lfc, IFileSource fs, PixelArtDete frame.Posterize(16, DitherMethod.No); frame.ColorFuzz = new Percentage(0); } - - if(resizeParams.Size.HasValue) - img = dirs.Apply(img,resizeParams); + + if (resizeParams.Size.HasValue) + img = dirs.Apply(img, resizeParams); Console.WriteLine($"Generated edges for {Request.Path}, radius={radius}, inFrames={inFrames}, outFrames={img.Count}"); return new LruFileCache.Entry { @@ -106,36 +108,38 @@ public class IsPixelArtController(LruFileCache lfc, IFileSource fs, PixelArtDete }; }).ContinueWith(t => File(t.Result.Data, t.Result.MimeType)); } - + [HttpGet("/colorFuzz/{*_:required}")] public async Task<FileContentResult> ColorFuzz() { return await _edgeCache.GetOrAdd(Request.Path.ToString() + Request.QueryString, async () => { var original = await fs.GetFile(Request.Path.ToString().Replace("/colorFuzz", "")); DiscordImageResizeParams resizeParams = new() { - Size = Request.Query.ContainsKey("size") && uint.TryParse(Request.Query["size"], out uint size) ? size : null, - Quality = Request.Query.ContainsKey("quality") && Enum.TryParse<DiscordImageResizeQuality>(Request.Query["quality"], true, out var quality) ? quality : DiscordImageResizeQuality.High, + Size = Request.Query.ContainsKey("size") && uint.TryParse(Request.Query["size"], out uint size) + ? size + : null, + Quality = Request.Query.ContainsKey("quality") && Enum.TryParse<DiscordImageResizeQuality>(Request.Query["quality"], true, out var quality) + ? quality + : DiscordImageResizeQuality.High, KeepAspectRatio = !Request.Query.ContainsKey("keepAspectRatio") || !bool.TryParse(Request.Query["keepAspectRatio"], out bool kar) || kar, Passthrough = Request.Query.ContainsKey("passthrough") && bool.TryParse(Request.Query["passthrough"], out bool pt) && pt, Animated = Request.Query.ContainsKey("animated") && bool.TryParse(Request.Query["animated"], out bool an) && an, - SpacebarAllowUpscale = Request.Query.ContainsKey("allowUpscale") && bool.TryParse(Request.Query["allowUpscale"], out bool au) && au + SpacebarAllowUpscale = Request.Query.ContainsKey("allowUpscale") && bool.TryParse(Request.Query["allowUpscale"], out bool au) && au, }; - - + double colorFuzz = 1; if (Request.Query.ContainsKey("colorFuzz")) double.TryParse(Request.Query["colorFuzz"], out colorFuzz); var img = await original.ToMagickImageCollectionAsync(); - int inFrames = img.Count; // using var edged = pads.RenderEdges(img, radius); foreach (var frame in img) { // get major color count frame.ColorFuzz = new Percentage(colorFuzz); } - - if(resizeParams.Size.HasValue) - img = dirs.Apply(img,resizeParams); + + if (resizeParams.Size.HasValue) + img = dirs.Apply(img, resizeParams); Console.WriteLine($"Generated colorFuzz for {Request.Path}, fuzz={colorFuzz}, inFrames={inFrames}, outFrames={img.Count}"); return new LruFileCache.Entry { @@ -145,5 +149,14 @@ public class IsPixelArtController(LruFileCache lfc, IFileSource fs, PixelArtDete }; }).ContinueWith(t => File(t.Result.Data, t.Result.MimeType)); } -} -*/ \ No newline at end of file + + [HttpGet("/defaultAvatar")] + public async Task<FileContentResult> DefaultAvatar() { + var re = new RainbowEnumerator(); + var img = new MagickImageCollection(); + + var ms = new MemoryStream(); + + return new FileContentResult(ms.ToArray(), "image/gif"); + } +} \ No newline at end of file