diff --git a/Source/QuestPDF.UnitTests/ImageTests.cs b/Source/QuestPDF.UnitTests/ImageTests.cs index 77abaa6..3c70a33 100644 --- a/Source/QuestPDF.UnitTests/ImageTests.cs +++ b/Source/QuestPDF.UnitTests/ImageTests.cs @@ -95,6 +95,28 @@ namespace QuestPDF.UnitTests (documentWithMultipleImagesSize / (float)documentWithSingleImageSize).Should().BeInRange(9.9f, 10); (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 container) { diff --git a/Source/QuestPDF/Helpers/Helpers.cs b/Source/QuestPDF/Helpers/Helpers.cs index b7f0878..30762b3 100644 --- a/Source/QuestPDF/Helpers/Helpers.cs +++ b/Source/QuestPDF/Helpers/Helpers.cs @@ -94,7 +94,9 @@ namespace QuestPDF.Helpers if (image.Width == targetResolution.Width && image.Height == targetResolution.Height) 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); return CompressImage(resultImage, compressionQuality);