// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.MetaData; using SixLabors.ImageSharp.PixelFormats; using Xunit; // ReSharper disable InconsistentNaming namespace SixLabors.ImageSharp.Tests { public class GifEncoderTests { private const PixelTypes TestPixelTypes = PixelTypes.Rgba32 | PixelTypes.RgbaVector | PixelTypes.Argb32; [Theory] [WithTestPatternImages(100, 100, TestPixelTypes)] public void EncodeGeneratedPatterns(TestImageProvider provider) where TPixel : struct, IPixel { using (Image image = provider.GetImage()) { provider.Utility.SaveTestOutputFile(image, "gif", new GifEncoder()); } } [Fact] public void Encode_IgnoreMetadataIsFalse_CommentsAreWritten() { GifEncoder options = new GifEncoder() { IgnoreMetadata = false }; TestFile testFile = TestFile.Create(TestImages.Gif.Rings); using (Image input = testFile.CreateImage()) { using (MemoryStream memStream = new MemoryStream()) { input.Save(memStream, options); memStream.Position = 0; using (Image output = Image.Load(memStream)) { Assert.Equal(1, output.MetaData.Properties.Count); Assert.Equal("Comments", output.MetaData.Properties[0].Name); Assert.Equal("ImageSharp", output.MetaData.Properties[0].Value); } } } } [Fact] public void Encode_IgnoreMetadataIsTrue_CommentsAreNotWritten() { GifEncoder options = new GifEncoder() { IgnoreMetadata = true }; TestFile testFile = TestFile.Create(TestImages.Gif.Rings); using (Image input = testFile.CreateImage()) { using (MemoryStream memStream = new MemoryStream()) { input.SaveAsGif(memStream, options); memStream.Position = 0; using (Image output = Image.Load(memStream)) { Assert.Equal(0, output.MetaData.Properties.Count); } } } } [Fact] public void Encode_WhenCommentIsTooLong_CommentIsTrimmed() { using (Image input = new Image(1, 1)) { string comments = new string('c', 256); input.MetaData.Properties.Add(new ImageProperty("Comments", comments)); using (MemoryStream memStream = new MemoryStream()) { input.Save(memStream, new GifEncoder()); memStream.Position = 0; using (Image output = Image.Load(memStream)) { Assert.Equal(1, output.MetaData.Properties.Count); Assert.Equal("Comments", output.MetaData.Properties[0].Name); Assert.Equal(255, output.MetaData.Properties[0].Value.Length); } } } } } }