using System; using System.IO; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Webp; using SixLabors.ImageSharp.Processing; namespace Gott.Services; public class ImageService { private const int MaxSideLength = 512; private const int WebPQuality = 80; /// /// Nimmt eine Base64-Data-URL (z.B. "data:image/png;base64,..."), skaliert das Bild /// auf max 512px Seitenlänge, konvertiert zu WebP und gibt eine neue Data-URL zurück. /// Gibt null zurück wenn input null/leer ist. /// public string ResizeDataUrl(string dataUrl) { if (string.IsNullOrEmpty(dataUrl)) return null; // Data-URL parsen: "data:;base64," var commaIndex = dataUrl.IndexOf(','); if (commaIndex < 0) return dataUrl; var base64 = dataUrl.Substring(commaIndex + 1); var bytes = Convert.FromBase64String(base64); using var image = Image.Load(bytes); // Skalieren wenn nötig if (image.Width > MaxSideLength || image.Height > MaxSideLength) { image.Mutate(x => x.Resize(new ResizeOptions { Size = new Size(MaxSideLength, MaxSideLength), Mode = ResizeMode.Max })); } // Immer als WebP encodieren using var ms = new MemoryStream(); image.Save(ms, new WebpEncoder { Quality = WebPQuality }); var webpBase64 = Convert.ToBase64String(ms.ToArray()); return "data:image/webp;base64," + webpBase64; } }