using System.Text; using Exsersewo.Common.Utilities; using ImageMagick; namespace Kynareth.Managers; public static partial class ImageManager { readonly static Encoding s_defaultEncoding = Encoding.Unicode; const double c_defaultFontSize = 20; public static async Task<(MemoryStream data, string contentType)> GetLiquidRescaledImageAsync(string image) { var imageStream = await HttpWebClient.GetStreamAsync(new Uri(image)).ConfigureAwait(false); using var magikImage = new MagickImageCollection(imageStream); Parallel.ForEach(magikImage, LiquidResizeFrame); MemoryStream stream = new(); magikImage.Write(stream); stream.Position = 0; magikImage.Dispose(); string cType = "image/png"; if (magikImage.Count > 1) cType = "image/gif"; return (stream, cType); } static void LiquidResizeFrame(IMagickImage frame) { int originalWidth = frame.Width; int originalHeight = frame.Height; frame.Resize(800, 600); frame.LiquidRescale(new MagickGeometry { X = 1, Width = Convert.ToInt32(frame.Width * 0.5), Height = Convert.ToInt32(frame.Height * 0.5) }); frame.LiquidRescale(new MagickGeometry { X = 2, Width = Convert.ToInt32(frame.Width * 1.5), Height = Convert.ToInt32(frame.Height * 1.5) }); frame.Resize(originalWidth, originalHeight); } }