From 2d63e31b489d943838e99e6be5c446c3543d5b14 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 23 Aug 2018 21:09:50 +0100 Subject: [PATCH] Add image blending tests to match the SVG spec examples --- .../ImageSharp.Tests/Drawing/DrawImageTest.cs | 53 ++++++++++++++++-- tests/ImageSharp.Tests/TestImages.cs | 3 + tests/Images/External | 2 +- tests/Images/Input/Png/ducky.png | Bin 0 -> 40960 bytes tests/Images/Input/Png/rainbow.png | Bin 0 -> 1447 bytes 5 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 tests/Images/Input/Png/ducky.png create mode 100644 tests/Images/Input/Png/rainbow.png diff --git a/tests/ImageSharp.Tests/Drawing/DrawImageTest.cs b/tests/ImageSharp.Tests/Drawing/DrawImageTest.cs index 740b30a8c..496692d96 100644 --- a/tests/ImageSharp.Tests/Drawing/DrawImageTest.cs +++ b/tests/ImageSharp.Tests/Drawing/DrawImageTest.cs @@ -5,14 +5,14 @@ using System; using System.Numerics; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; +using SixLabors.ImageSharp.Processing.Processors.Transforms; +using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; using SixLabors.Primitives; using Xunit; namespace SixLabors.ImageSharp.Tests { - using SixLabors.ImageSharp.Processing; - using SixLabors.ImageSharp.Processing.Processors.Transforms; - + [GroupOutput("Drawing")] public class DrawImageTest : FileTestBase { private const PixelTypes PixelTypes = Tests.PixelTypes.Rgba32; @@ -41,11 +41,32 @@ namespace SixLabors.ImageSharp.Tests using (var blend = Image.Load(TestFile.Create(TestImages.Bmp.Car).Bytes)) { blend.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); - image.Mutate(x => x.DrawImage(blend, new Point(image.Width / 4, image.Height / 4), mode, .75f) ); + image.Mutate(x => x.DrawImage(blend, new Point(image.Width / 4, image.Height / 4), mode, .75f)); image.DebugSave(provider, new { mode }); } } + [Theory] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.Normal)] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.Multiply)] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.Add)] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.Subtract)] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.Screen)] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.Darken)] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.Lighten)] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.Overlay)] + [WithFile(TestImages.Png.Rainbow, PixelTypes, PixelColorBlendingMode.HardLight)] + public void ImageBlendingMatchesSvgSpecExamples(TestImageProvider provider, PixelColorBlendingMode mode) + where TPixel : struct, IPixel + { + using (Image background = provider.GetImage()) + using (var source = Image.Load(TestFile.Create(TestImages.Png.Ducky).Bytes)) + { + background.Mutate(x => x.DrawImage(source, mode, 1F)); + VerifyImage(provider, mode, background); + } + } + [Theory] [WithFileCollection(nameof(TestFiles), PixelTypes, PixelColorBlendingMode.Normal)] public void ImageShouldDrawTransformedImage(TestImageProvider provider, PixelColorBlendingMode mode) @@ -84,7 +105,7 @@ namespace SixLabors.ImageSharp.Tests { overlay.Mutate(x => x.Fill(Rgba32.Black)); - int xy = -25; + const int xy = -25; Rgba32 backgroundPixel = background[0, 0]; Rgba32 overlayPixel = overlay[Math.Abs(xy) + 1, Math.Abs(xy) + 1]; @@ -106,7 +127,7 @@ namespace SixLabors.ImageSharp.Tests { overlay.Mutate(x => x.Fill(Rgba32.Black)); - int xy = 25; + const int xy = 25; Rgba32 backgroundPixel = background[xy - 1, xy - 1]; Rgba32 overlayPixel = overlay[0, 0]; @@ -118,5 +139,25 @@ namespace SixLabors.ImageSharp.Tests background.DebugSave(provider, testOutputDetails: "Positive"); } } + + private static void VerifyImage( + TestImageProvider provider, + PixelColorBlendingMode mode, + Image img) + where TPixel : struct, IPixel + { + img.DebugSave( + provider, + new { mode }, + appendPixelTypeToFileName: false, + appendSourceFileOrDescription: false); + + var comparer = ImageComparer.TolerantPercentage(0.01F, 3); + img.CompareFirstFrameToReferenceOutput(comparer, + provider, + new { mode }, + appendPixelTypeToFileName: false, + appendSourceFileOrDescription: false); + } } } \ No newline at end of file diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index 5eb70117e..1ee3f9675 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -68,6 +68,9 @@ namespace SixLabors.ImageSharp.Tests public const string Ratio1x4 = "Png/ratio-1x4.png"; public const string Ratio4x1 = "Png/ratio-4x1.png"; + public const string Ducky = "Png/ducky.png"; + public const string Rainbow = "Png/rainbow.png"; + public static class Bad { // Odd chunk lengths diff --git a/tests/Images/External b/tests/Images/External index 6a43d335f..fcf311bf1 160000 --- a/tests/Images/External +++ b/tests/Images/External @@ -1 +1 @@ -Subproject commit 6a43d335f216d6325a6a9fd8d35942ade12b7c7b +Subproject commit fcf311bf15bea061e552e4cc357cafe2d4f4bd70 diff --git a/tests/Images/Input/Png/ducky.png b/tests/Images/Input/Png/ducky.png new file mode 100644 index 0000000000000000000000000000000000000000..e67e720eaf3395343845b38beb95ea3c9b8d049f GIT binary patch literal 40960 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
#N!+2sk6B{E=H;9&{j*Ruvns%aPl7A&PAsqpFn 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 TI$7to00000NkvXXu0mjfRM(@o literal 0 HcmV?d00001 diff --git a/tests/Images/Input/Png/rainbow.png b/tests/Images/Input/Png/rainbow.png new file mode 100644 index 0000000000000000000000000000000000000000..05aaa87fa403554ae152041337f39988b7b2b6b0 GIT binary patch literal 1447 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k2}mkgS)K$^jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk+G7+A$UT^vIy;@)2RTYL^^QbFwd*q5h{ner z$6WmIdFuN&yR#nNTP^-(=d<3s*U#QA{kz&af5z^=$8P1Chvw$m{JuRqJ#XjJqwDi) z|D9I5Y`)BH^TL;xU(fc9n{M`T^B48&DLubcir>6i<8Ghz^91`%S5JwBu8s~_dvZ<8{J@=tdy9%cpIVza_4Z}0 zx{R=o$(OtSt`yzB^o-pMBkPMPVM?iKN?(_{yy|he{9M>~x%w<$?g&^=x5>te<-NB0|2yyN{nGXSmZe;KW}Q}ZHTl-Ed6Uh*Nd0$xfBf3lx*wnI4qyMa z_xY{0Ur!pkwe0n$GSoizAWr;f@k~&qV rjS{0_Kt?+Fdq3&m{xyM%>ls*fb}wB$C1ee-9A)ry^>bP0l+XkK4i}PR literal 0 HcmV?d00001