diff --git a/tests/ImageSharp.Tests/Formats/WebP/WebPDecoderTests.cs b/tests/ImageSharp.Tests/Formats/WebP/WebPDecoderTests.cs index d31343ef3f..77768639cb 100644 --- a/tests/ImageSharp.Tests/Formats/WebP/WebPDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/WebP/WebPDecoderTests.cs @@ -17,12 +17,14 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP public class WebPDecoderTests { + private static WebPDecoder WebpDecoder => new WebPDecoder(); + private static MagickReferenceDecoder ReferenceDecoder => new MagickReferenceDecoder(); + [Theory] [InlineData(Lossless.Lossless1, 1000, 307, 24)] [InlineData(Lossless.Lossless2, 1000, 307, 24)] - [InlineData(Lossy.Alpha.LossyAlpha1, 1000, 307, 24)] - [InlineData(Lossy.Alpha.LossyAlpha2, 1000, 307, 24)] - [InlineData(Animated.Animated1, 400, 400, 24)] + [InlineData(Lossy.Alpha.LossyAlpha1, 1000, 307, 32)] + [InlineData(Lossy.Alpha.LossyAlpha2, 1000, 307, 32)] public void Identify_DetectsCorrectDimensions( string imagePath, int expectedWidth, @@ -41,19 +43,40 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP } [Theory] - [InlineData(Lossy.Alpha.LossyAlpha1, 1000, 307, 24)] - public void DecodeLossyImage_Tmp( - string imagePath, - int expectedWidth, - int expectedHeight, - int expectedBitsPerPixel) + [WithFile(Lossy.Bike, PixelTypes.Rgba32)] + [WithFile(Lossy.LenaIccp, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy01, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy02, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy03, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy04, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy05, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy06, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy07, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy08, PixelTypes.Rgba32)] + [WithFile(Lossy.Lossy09, PixelTypes.Rgba32)] + public void WebpDecoder_CanDecode_Lossy(TestImageProvider provider) + where TPixel : struct, IPixel { - var testFile = TestFile.Create(imagePath); - using (var stream = new MemoryStream(testFile.Bytes, false)) + using (Image image = provider.GetImage(WebpDecoder)) { - var image = Image.Load(stream); - Assert.Equal(expectedWidth, image.Width); - Assert.Equal(expectedHeight, image.Height); + image.DebugSave(provider); + image.CompareToOriginal(provider, ReferenceDecoder); + } + } + + [Theory] + [WithFile(Lossy.Alpha.LossyAlpha1, PixelTypes.Rgba32)] + [WithFile(Lossy.Alpha.LossyAlpha2, PixelTypes.Rgba32)] + [WithFile(Lossy.Alpha.LossyAlpha3, PixelTypes.Rgba32)] + [WithFile(Lossy.Alpha.LossyAlpha4, PixelTypes.Rgba32)] + [WithFile(Lossy.Alpha.LossyAlphaNoCompression, PixelTypes.Rgba32)] + public void WebpDecoder_CanDecode_Lossy_WithAlpha(TestImageProvider provider) + where TPixel : struct, IPixel + { + using (Image image = provider.GetImage(WebpDecoder)) + { + image.DebugSave(provider); + image.CompareToOriginal(provider, ReferenceDecoder); } } @@ -63,10 +86,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP public void WebpDecoder_CanDecode_Lossless_WithoutTransforms(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage(new WebPDecoder())) + using (Image image = provider.GetImage(WebpDecoder)) { image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + image.CompareToOriginal(provider, ReferenceDecoder); } } @@ -81,10 +104,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage(new WebPDecoder())) + using (Image image = provider.GetImage(WebpDecoder)) { image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + image.CompareToOriginal(provider, ReferenceDecoder); } } @@ -97,10 +120,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP public void WebpDecoder_CanDecode_Lossless_WithColorIndexTransform(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage(new WebPDecoder())) + using (Image image = provider.GetImage(WebpDecoder)) { image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + image.CompareToOriginal(provider, ReferenceDecoder); } } @@ -110,10 +133,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP public void WebpDecoder_CanDecode_Lossless_WithPredictorTransform(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage(new WebPDecoder())) + using (Image image = provider.GetImage(WebpDecoder)) { image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + image.CompareToOriginal(provider, ReferenceDecoder); } } @@ -123,10 +146,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP public void WebpDecoder_CanDecode_Lossless_WithCrossColorTransform(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage(new WebPDecoder())) + using (Image image = provider.GetImage(WebpDecoder)) { image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + image.CompareToOriginal(provider, ReferenceDecoder); } } @@ -147,10 +170,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP public void WebpDecoder_CanDecode_Lossless_WithTwoTransforms(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage(new WebPDecoder())) + using (Image image = provider.GetImage(WebpDecoder)) { image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + image.CompareToOriginal(provider, ReferenceDecoder); } } @@ -166,10 +189,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP public void WebpDecoder_CanDecode_Lossless_WithThreeTransforms(TestImageProvider provider) where TPixel : struct, IPixel { - using (Image image = provider.GetImage(new WebPDecoder())) + using (Image image = provider.GetImage(WebpDecoder)) { image.DebugSave(provider); - image.CompareToOriginal(provider, new MagickReferenceDecoder()); + image.CompareToOriginal(provider, ReferenceDecoder); } } @@ -181,7 +204,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.WebP public void WebpDecoder_ThrowImageFormatException_OnInvalidImages(TestImageProvider provider) where TPixel : struct, IPixel { - Assert.Throws(() => { using (provider.GetImage(new WebPDecoder())) { } }); + Assert.Throws(() => { using (provider.GetImage(WebpDecoder)) { } }); } } } diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index aa057c6b85..28613b5c81 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -428,11 +428,18 @@ namespace SixLabors.ImageSharp.Tests public static class Lossy { - public const string SampleWebpOne = "WebP/Lossy/1.webp"; - public const string SampleWebpTwo = "WebP/Lossy/2.webp"; - public const string SampleWebpThree = "WebP/Lossy/3.webp"; - public const string SampleWebpFour = "WebP/Lossy/4.webp"; - public const string SampleWebpFive = "WebP/Lossy/5.webp"; + public const string Bike = "WebP/bike_lossy.webp"; + public const string LenaIccp = "WebP/lossy_iccp.webp"; + public const string VeryShort = "WebP/very_short.webp"; + public const string Lossy01 = "WebP/vp80-01-intra-1400.webp"; + public const string Lossy02 = "WebP/vp80-00-comprehensive-010.webp"; + public const string Lossy03 = "WebP/vp80-01-intra-1417.webp"; + public const string Lossy04 = "WebP/vp80-02-inter-1402.webp"; + public const string Lossy05 = "WebP/vp80-03-segmentation-1401.webp"; + public const string Lossy06 = "WebP/vp80-02-inter-1418.webp"; + public const string Lossy07 = "WebP/vp80-03-segmentation-1403.webp"; + public const string Lossy08 = "WebP/vp80-03-segmentation-1407.webp"; + public const string Lossy09 = "WebP/test.webp"; public static class Alpha { @@ -440,6 +447,7 @@ namespace SixLabors.ImageSharp.Tests public const string LossyAlpha2 = "WebP/lossy_alpha2.webp"; public const string LossyAlpha3 = "WebP/lossy_alpha3.webp"; public const string LossyAlpha4 = "WebP/lossy_alpha4.webp"; + public const string LossyAlphaNoCompression = "WebP/alpha_no_compression.webp"; } } diff --git a/tests/Images/Input/WebP/bike_lossy.webp b/tests/Images/Input/WebP/bike_lossy.webp new file mode 100644 index 0000000000..73eabf3635 --- /dev/null +++ b/tests/Images/Input/WebP/bike_lossy.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21612476f2d7668f773ce286af1a2a4c33da8718352c5a5c1dd839a4643de823 +size 9396