Browse Source

Automated image compression fixes

MarcinZiabek 2 years ago
parent
commit
3606bc9e79
2 changed files with 25 additions and 1 deletions
  1. 22 0
      Source/QuestPDF.UnitTests/ImageTests.cs
  2. 3 1
      Source/QuestPDF/Helpers/Helpers.cs

+ 22 - 0
Source/QuestPDF.UnitTests/ImageTests.cs

@@ -95,6 +95,28 @@ namespace QuestPDF.UnitTests
             (documentWithMultipleImagesSize / (float)documentWithSingleImageSize).Should().BeInRange(9.9f, 10);
             (documentWithMultipleImagesSize / (float)documentWithSingleImageSize).Should().BeInRange(9.9f, 10);
             (documentWithSingleImageUsedMultipleTimesSize / (float)documentWithSingleImageSize).Should().BeInRange(1f, 1.05f);
             (documentWithSingleImageUsedMultipleTimesSize / (float)documentWithSingleImageSize).Should().BeInRange(1f, 1.05f);
         }
         }
+        
+        [Test]
+        public void ImageCompressionHasImpactOnDocumentSize()
+        {
+            var photo = File.ReadAllBytes("Resources/photo.jpg");
+
+            var veryLowCompressionSize = GetDocumentSize(container => container.Image(photo).WithCompressionQuality(ImageCompressionQuality.VeryLow));
+            var bestCompressionSize = GetDocumentSize(container => container.Image(photo).WithCompressionQuality(ImageCompressionQuality.Best));
+
+            (bestCompressionSize / (float)veryLowCompressionSize).Should().BeGreaterThan(25);
+        }
+        
+        [Test]
+        public void TargetDpiHasImpactOnDocumentSize()
+        {
+            var photo = File.ReadAllBytes("Resources/photo.jpg");
+            
+            var lowDpiSize = GetDocumentSize(container => container.Image(photo).WithRasterDpi(12));
+            var highDpiSize = GetDocumentSize(container => container.Image(photo).WithRasterDpi(144));
+
+            (highDpiSize / (float)lowDpiSize).Should().BeGreaterThan(40);
+        }
 
 
         private static int GetDocumentSize(Action<IContainer> container)
         private static int GetDocumentSize(Action<IContainer> container)
         {
         {

+ 3 - 1
Source/QuestPDF/Helpers/Helpers.cs

@@ -94,7 +94,9 @@ namespace QuestPDF.Helpers
             if (image.Width == targetResolution.Width && image.Height == targetResolution.Height)
             if (image.Width == targetResolution.Width && image.Height == targetResolution.Height)
                 return CompressImage(image, compressionQuality);
                 return CompressImage(image, compressionQuality);
             
             
-            using var resultImage = SKImage.Create(image.Info);
+            var imageInfo = new SKImageInfo(targetResolution.Width, targetResolution.Height, image.Info.ColorType, image.Info.AlphaType, image.Info.ColorSpace);
+            
+            using var resultImage = SKImage.Create(imageInfo);
             image.ScalePixels(resultImage.PeekPixels(), SKFilterQuality.Medium);
             image.ScalePixels(resultImage.PeekPixels(), SKFilterQuality.Medium);
             
             
             return CompressImage(resultImage, compressionQuality);
             return CompressImage(resultImage, compressionQuality);