using Microsoft.Extensions.Logging; using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Web; using SixLabors.ImageSharp.Web.Commands; using SixLabors.ImageSharp.Web.Processors; using System.Globalization; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Formats.Webp; namespace zero.Media.ImageSharp.Processors; public class LoopWebProcessor : IImageWebProcessor { // /// The command constant for the loop prop. /// public const string Loop = "loop"; /// /// The reusable collection of commands. /// private static readonly IEnumerable LoopCommands = [Loop]; /// public IEnumerable Commands { get; } = LoopCommands; /// public FormattedImage Process( FormattedImage image, ILogger logger, CommandCollection commands, CommandParser parser, CultureInfo culture) { if (commands.Contains(Loop)) { SixLabors.ImageSharp.Metadata.ImageMetadata metadata = image.Image.Metadata; bool loop = parser.ParseValue(commands.GetValueOrDefault(Loop), culture); if (!loop) { if (metadata.TryGetWebpMetadata(out WebpMetadata webpMetadata)) { webpMetadata.RepeatCount = 1; } if (metadata.TryGetGifMetadata(out GifMetadata gifMetadata)) { gifMetadata.RepeatCount = 1; } if (metadata.TryGetPngMetadata(out PngMetadata pngMetadata)) { pngMetadata.RepeatCount = 1; } } } return image; } /// public bool RequiresTrueColorPixelFormat(CommandCollection commands, CommandParser parser, CultureInfo culture) => true; }