From c720c40d54f03988a2275eee0f50729405a0bb20 Mon Sep 17 00:00:00 2001 From: Dirk Lemstra Date: Sun, 27 Aug 2017 01:55:49 +0200 Subject: [PATCH] The ImageOptimizer will now return true when the file could be compressed otherwise false. --- .../Shared/Optimizers/ImageOptimizer.cs | 33 +++++++++++-------- .../Optimizers/ImageOptimizerTestHelper.cs | 12 ++++--- .../ImageOptimizerTestHelper{TOptimizer}.cs | 31 +++++++---------- .../Shared/Optimizers/ImageOptimizerTests.cs | 24 +++++++------- 4 files changed, 51 insertions(+), 49 deletions(-) diff --git a/Source/Magick.NET/Shared/Optimizers/ImageOptimizer.cs b/Source/Magick.NET/Shared/Optimizers/ImageOptimizer.cs index 9faf6c2859..2ff6138c12 100644 --- a/Source/Magick.NET/Shared/Optimizers/ImageOptimizer.cs +++ b/Source/Magick.NET/Shared/Optimizers/ImageOptimizer.cs @@ -56,11 +56,12 @@ private string SupportedFormats /// smaller the file won't be overwritten. /// /// The image file to compress - public void Compress(FileInfo file) + /// True when the image could be compressed otherwise false. + public bool Compress(FileInfo file) { Throw.IfNull(nameof(file), file); - DoCompress(file); + return DoCompress(file); } /// @@ -69,12 +70,13 @@ public void Compress(FileInfo file) /// smaller the file won't be overwritten. /// /// The file name of the image to compress - public void Compress(string fileName) + /// True when the image could be compressed otherwise false. + public bool Compress(string fileName) { string filePath = FileHelper.CheckForBaseDirectory(fileName); Throw.IfNullOrEmpty(nameof(fileName), filePath); - DoCompress(new FileInfo(filePath)); + return DoCompress(new FileInfo(filePath)); } /// @@ -82,6 +84,7 @@ public void Compress(string fileName) /// /// The file to check. /// True when the supplied file name is supported based on the extension of the file. + /// True when the image could be compressed otherwise false. public bool IsSupported(FileInfo file) { return IsSupported(MagickFormatInfo.Create(file)); @@ -120,11 +123,12 @@ public bool IsSupported(string fileName) /// the file won't be overwritten. /// /// The image file to compress - public void LosslessCompress(FileInfo file) + /// True when the image could be compressed otherwise false. + public bool LosslessCompress(FileInfo file) { Throw.IfNull(nameof(file), file); - DoLosslessCompress(file); + return DoLosslessCompress(file); } /// @@ -132,12 +136,13 @@ public void LosslessCompress(FileInfo file) /// the file won't be overwritten. /// /// The file name of the image to compress - public void LosslessCompress(string fileName) + /// True when the image could be compressed otherwise false. + public bool LosslessCompress(string fileName) { string filePath = FileHelper.CheckForBaseDirectory(fileName); Throw.IfNullOrEmpty(nameof(fileName), filePath); - DoLosslessCompress(new FileInfo(filePath)); + return DoLosslessCompress(new FileInfo(filePath)); } private static Collection CreateImageOptimizers() @@ -160,24 +165,24 @@ private static MagickFormatInfo GetFormatInformation(FileInfo file) return MagickNET.GetFormatInformation(imageInfo.Format); } - private void DoLosslessCompress(FileInfo file) + private bool DoLosslessCompress(FileInfo file) { IImageOptimizer optimizer = GetOptimizer(file); if (optimizer == null) - return; + return false; optimizer.OptimalCompression = OptimalCompression; - optimizer.LosslessCompress(file); + return optimizer.LosslessCompress(file); } - private void DoCompress(FileInfo file) + private bool DoCompress(FileInfo file) { IImageOptimizer optimizer = GetOptimizer(file); if (optimizer == null) - return; + return false; optimizer.OptimalCompression = OptimalCompression; - optimizer.Compress(file); + return optimizer.Compress(file); } private IImageOptimizer GetOptimizer(FileInfo file) diff --git a/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTestHelper.cs b/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTestHelper.cs index 176501020a..08b07458d0 100644 --- a/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTestHelper.cs +++ b/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTestHelper.cs @@ -18,16 +18,18 @@ namespace Magick.NET.Tests { public abstract class ImageOptimizerTestHelper { - protected long AssertCompress(string fileName, bool resultIsSmaller, Action action) + protected long AssertCompress(string fileName, bool resultIsSmaller, Func action) { using (TemporaryFile tempFile = new TemporaryFile(fileName)) { long before = tempFile.Length; - action(tempFile); + bool result = action(tempFile); long after = tempFile.Length; + Assert.AreEqual(resultIsSmaller, result); + if (resultIsSmaller) Assert.IsTrue(after < before, "{0} is not smaller than {1}", after, before); else @@ -37,17 +39,19 @@ protected long AssertCompress(string fileName, bool resultIsSmaller, Action action) + protected long AssertCompress(string fileName, bool resultIsSmaller, Func action) { using (TemporaryFile tempFile = new TemporaryFile(fileName)) { long before = tempFile.Length; - action(tempFile.FullName); + bool result = action(tempFile.FullName); tempFile.Refresh(); long after = tempFile.Length; + Assert.AreEqual(resultIsSmaller, result); + if (resultIsSmaller) Assert.IsTrue(after < before, "{0} is not smaller than {1}", after, before); else diff --git a/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTestHelper{TOptimizer}.cs b/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTestHelper{TOptimizer}.cs index e55eadab83..850c7cfd67 100644 --- a/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTestHelper{TOptimizer}.cs +++ b/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTestHelper{TOptimizer}.cs @@ -23,19 +23,16 @@ public abstract class ImageOptimizerTestHelper : ImageOptimizerTestH protected long AssertCompressSmaller(string fileName) { - bool isCompressed = false; - long lengthA = AssertCompress(fileName, true, (FileInfo file) => { - isCompressed = Optimizer.Compress(file); + return Optimizer.Compress(file); }); long lengthB = AssertCompress(fileName, true, (string file) => { - Optimizer.Compress(file); + return Optimizer.Compress(file); }); - Assert.IsTrue(isCompressed); Assert.AreEqual(lengthA, lengthB, 1); return lengthA; } @@ -46,12 +43,12 @@ protected void AssertCompressNotSmaller(string fileName) long lengthA = AssertCompress(fileName, false, (FileInfo file) => { - isCompressed = Optimizer.Compress(file); + return Optimizer.Compress(file); }); long lengthB = AssertCompress(fileName, false, (string file) => { - Optimizer.Compress(file); + return Optimizer.Compress(file); }); Assert.IsFalse(isCompressed); @@ -71,44 +68,39 @@ protected void AssertCompressTwice(string fileName) long after2 = tempFile.Length; Assert.AreEqual(after1, after2, 1); - Assert.AreNotEqual(compressed1, compressed2); + Assert.IsTrue(compressed1); + Assert.IsFalse(compressed2); } } protected long AssertLosslessCompressSmaller(string fileName) { - bool isCompressed = false; - long lengthA = AssertCompress(fileName, true, (FileInfo file) => { - isCompressed = Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); long lengthB = AssertCompress(fileName, true, (string file) => { - Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); - Assert.IsTrue(isCompressed); Assert.AreEqual(lengthA, lengthB, 1); return lengthA; } protected void AssertLosslessCompressNotSmaller(string fileName) { - bool isCompressed = false; - long lengthA = AssertCompress(fileName, false, (FileInfo file) => { - isCompressed = Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); long lengthB = AssertCompress(fileName, false, (string file) => { - Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); - Assert.IsFalse(isCompressed); Assert.AreEqual(lengthA, lengthB); } @@ -125,7 +117,8 @@ protected void AssertLosslessCompressTwice(string fileName) long after2 = tempFile.Length; Assert.AreEqual(after1, after2, 1); - Assert.AreNotEqual(compressed1, compressed2); + Assert.IsTrue(compressed1); + Assert.IsFalse(compressed2); } } } diff --git a/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTests.cs b/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTests.cs index 8e8c9138ab..849c8cb31a 100644 --- a/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTests.cs +++ b/Tests/Magick.NET.Tests/Shared/Optimizers/ImageOptimizerTests.cs @@ -236,7 +236,7 @@ public void Compress_CanCompressGifFile_FileIsSmaller() { AssertCompress(Files.FujiFilmFinePixS1ProGIF, true, (FileInfo file) => { - Optimizer.Compress(file); + return Optimizer.Compress(file); }); } @@ -245,7 +245,7 @@ public void Compress_CanCompressJpgFile_FileIsSmaller() { AssertCompress(Files.ImageMagickJPG, true, (FileInfo file) => { - Optimizer.Compress(file); + return Optimizer.Compress(file); }); } @@ -254,7 +254,7 @@ public void Compress_CanCompressPngFile_FileIsSmaller() { AssertCompress(Files.SnakewarePNG, true, (FileInfo file) => { - Optimizer.Compress(file); + return Optimizer.Compress(file); }); } @@ -263,7 +263,7 @@ public void Compress_CannotCompressGifFile_FileNotIsSmaller() { AssertCompress(Files.RoseSparkleGIF, false, (string file) => { - Optimizer.Compress(file); + return Optimizer.Compress(file); }); } @@ -272,7 +272,7 @@ public void Compress_CannotCompressJpgFile_FileIsNotSmaller() { AssertCompress(Files.LetterJPG, false, (string file) => { - Optimizer.Compress(file); + return Optimizer.Compress(file); }); } @@ -281,7 +281,7 @@ public void Compress_CannotCompressPngFile_FileIsNotSmaller() { AssertCompress(Files.MagickNETIconPNG, false, (string file) => { - Optimizer.Compress(file); + return Optimizer.Compress(file); }); } @@ -290,7 +290,7 @@ public void LosslessCompress_CanCompressGifFile_FileIsSmaller() { AssertCompress(Files.FujiFilmFinePixS1ProGIF, true, (FileInfo file) => { - Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); } @@ -299,7 +299,7 @@ public void LosslessCompress_CanCompressJpgFile_FileIsSmaller() { AssertCompress(Files.ImageMagickJPG, true, (FileInfo file) => { - Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); } @@ -308,7 +308,7 @@ public void LosslessCompress_CanCompressPngFile_FileIsSmaller() { AssertCompress(Files.SnakewarePNG, true, (FileInfo file) => { - Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); } @@ -317,7 +317,7 @@ public void LosslessCompress_CannotCompressGifFile_FileNotIsSmaller() { AssertCompress(Files.RoseSparkleGIF, false, (string file) => { - Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); } @@ -326,7 +326,7 @@ public void LosslessCompress_CannotCompressJpgFile_FileIsNotSmaller() { AssertCompress(Files.LetterJPG, false, (string file) => { - Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); } @@ -335,7 +335,7 @@ public void LosslessCompress_CannotCompressPngFile_FileIsNotSmaller() { AssertCompress(Files.MagickNETIconPNG, false, (string file) => { - Optimizer.LosslessCompress(file); + return Optimizer.LosslessCompress(file); }); } }