1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.imaging.roundtrip;
19
20 import static org.junit.jupiter.api.Assertions.assertTrue;
21
22 import java.awt.image.BufferedImage;
23 import java.io.ByteArrayOutputStream;
24 import java.util.stream.Stream;
25
26 import org.apache.commons.imaging.ImageInfo;
27 import org.apache.commons.imaging.Imaging;
28 import org.apache.commons.imaging.PixelDensity;
29 import org.apache.commons.imaging.formats.tiff.TiffImageParser;
30 import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
31 import org.junit.jupiter.params.ParameterizedTest;
32 import org.junit.jupiter.params.provider.MethodSource;
33
34 public class PixelDensityRoundtrip extends RoundtripBase {
35
36 public static Stream<FormatInfo> testPixelDensityRoundtrip() {
37 return Stream.of(FormatInfo.PRESERVING_RESOLUTION_FORMATS);
38 }
39
40 @ParameterizedTest
41 @MethodSource
42 public void testPixelDensityRoundtrip(final FormatInfo formatInfo) throws Exception {
43 final BufferedImage testImage = TestImages.createFullColorImage(2, 2);
44
45 final TiffImagingParameters params = new TiffImagingParameters();
46 final PixelDensity pixelDensity = PixelDensity.createFromPixelsPerInch(75, 150);
47 params.setPixelDensity(pixelDensity);
48 final TiffImageParser tiffImageParser = new TiffImageParser();
49 final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
50 tiffImageParser.writeImage(testImage, byteArrayOutputStream, params);
51
52 final ImageInfo imageInfo = Imaging.getImageInfo(byteArrayOutputStream.toByteArray());
53 if (imageInfo != null) {
54 final int xReadDPI = imageInfo.getPhysicalWidthDpi();
55 final int yReadDPI = imageInfo.getPhysicalHeightDpi();
56
57 assertTrue(Math.abs((xReadDPI - pixelDensity.horizontalDensityInches()) / pixelDensity.horizontalDensityInches()) <= 0.05);
58 assertTrue(Math.abs((yReadDPI - pixelDensity.verticalDensityInches()) / pixelDensity.verticalDensityInches()) <= 0.05);
59 }
60 }
61
62 }