| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using System;
- using System.IO;
- using System.Linq;
- using NUnit.Framework;
- using NUnit.Framework.Legacy;
- using QuestPDF.Fluent;
- using QuestPDF.Helpers;
- using QuestPDF.Infrastructure;
- using SkiaSharp;
- namespace QuestPDF.UnitTests
- {
- public class GenerateImageTests
- {
- [Test]
- [TestCaseSource(nameof(GeneratedImageResolutionCorrespondsToTargetDpi_TestCases))]
- public void GeneratedImageResolutionCorrespondsToTargetDpi(GeneratedImageResolutionCorrespondsToTargetDpi_TestCaseItem testCase)
- {
- // act
- var images = Document
- .Create(document => document.Page(page =>
- {
- page.Size(testCase.PageSize);
- page.Content().Text("Test");
- }))
- .GenerateImages(new ImageGenerationSettings { RasterDpi = testCase.TargetDpi })
- .ToList();
-
- // assert
- Assert.That(images, Has.Exactly(1).Items);
- var imageData = images.First();
- Assert.That(imageData, Is.Not.Null);
-
- using var image = SKImage.FromEncodedData(imageData);
- Assert.That(image, Is.Not.Null);
-
- Assert.That(image.Width, Is.EqualTo(testCase.ExpectedImageSize.Width));
- Assert.That(image.Height, Is.EqualTo(testCase.ExpectedImageSize.Height));
- }
- public record GeneratedImageResolutionCorrespondsToTargetDpi_TestCaseItem(PageSize PageSize, int TargetDpi, ImageSize ExpectedImageSize);
-
- public static GeneratedImageResolutionCorrespondsToTargetDpi_TestCaseItem[] GeneratedImageResolutionCorrespondsToTargetDpi_TestCases =
- {
- new(new PageSize(150, 250), 72, new ImageSize(150, 250)),
- new(new PageSize(200, 300), 144, new ImageSize(400, 600)),
- new(new PageSize(250, 350), 360, new ImageSize(1250, 1750)),
- };
- [Test]
- public void GeneratedImageSizeCorrespondsToImageQuality()
- {
- // arrange
- var document = Document.Create(document => document.Page(page =>
- {
- page.Content().Image("Resources/photo.jpg");
- }));
-
- // act
- var imageSizeWithLowQuality = CheckImageSize(ImageCompressionQuality.Low);
- var imageSizeWithMediumQuality = CheckImageSize(ImageCompressionQuality.Medium);
- var imageSizeWithHighQuality = CheckImageSize(ImageCompressionQuality.High);
-
- // assert
- Assert.That(imageSizeWithLowQuality, Is.LessThan(imageSizeWithMediumQuality));
- Assert.That(imageSizeWithMediumQuality, Is.LessThan(imageSizeWithHighQuality));
- int CheckImageSize(ImageCompressionQuality quality)
- {
- var images = document
- .GenerateImages(new ImageGenerationSettings() { ImageFormat = ImageFormat.Jpeg, ImageCompressionQuality = quality })
- .ToList();
-
- Assert.That(images, Has.Exactly(1).Items);
- var image = images.First();
- Assert.That(image, Is.Not.Null);
- return image.Length;
- }
- }
-
-
- [TestCase(ImageFormat.Png)]
- [TestCase(ImageFormat.Jpeg)]
- [TestCase(ImageFormat.Webp)]
- public void ImageFormatIsRespected(ImageFormat imageFormat)
- {
- var images = Document
- .Create(document =>
- {
- document.Page(page =>
- {
- page.Content().Padding(25).AspectRatio(2).Background(Colors.Red.Medium);
- });
- })
- .GenerateImages(new ImageGenerationSettings() { ImageFormat = imageFormat })
- .ToList();
-
- Assert.That(images, Has.Exactly(1).Items);
- var imageData = images.First();
- Assert.That(imageData, Is.Not.Null);
- using var imageStream = new MemoryStream(imageData);
- using var imageCodec = SKCodec.Create(imageStream);
- Assert.That(imageCodec, Is.Not.Null);
- Assert.That(imageCodec.EncodedFormat.ToString(), Is.EqualTo(imageFormat.ToString()));
- }
- }
- }
|