using System; using System.IO; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Processing; namespace Gott.Services; public class ImageService { private const int MaxSideLength = 512; /// /// Nimmt eine Base64-Data-URL (z.B. "data:image/png;base64,..."), skaliert das Bild /// auf max 512px Seitenlänge 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); // Nur skalieren wenn nötig if (image.Width <= MaxSideLength && image.Height <= MaxSideLength) return dataUrl; image.Mutate(x => x.Resize(new ResizeOptions { Size = new Size(MaxSideLength, MaxSideLength), Mode = ResizeMode.Max })); using var ms = new MemoryStream(); image.Save(ms, new PngEncoder()); var resizedBase64 = Convert.ToBase64String(ms.ToArray()); return "data:image/png;base64," + resizedBase64; } }