|
6 | 6 |
|
7 | 7 | import java.io.ByteArrayInputStream; |
8 | 8 | import java.io.ByteArrayOutputStream; |
| 9 | +import java.io.File; |
| 10 | +import java.nio.file.Files; |
9 | 11 | import java.util.HashMap; |
| 12 | +import java.util.Iterator; |
10 | 13 | import java.util.Map; |
| 14 | +import javax.imageio.ImageIO; |
| 15 | +import javax.imageio.ImageReader; |
| 16 | +import javax.imageio.metadata.IIOMetadata; |
| 17 | +import javax.imageio.stream.ImageInputStream; |
11 | 18 | import org.geotools.api.coverage.grid.GridCoverageReader; |
12 | 19 | import org.geotools.api.referencing.operation.MathTransform; |
13 | 20 | import org.geotools.coverage.grid.GridCoverage2D; |
@@ -50,6 +57,78 @@ public void testCogExport() throws Exception { |
50 | 57 |
|
51 | 58 | assertTrue(result.length > 0); |
52 | 59 |
|
| 60 | + final File tempFile = File.createTempFile("mapfish-cog-", ".tif"); |
| 61 | + tempFile.deleteOnExit(); |
| 62 | + |
| 63 | + Files.write(tempFile.toPath(), result); |
| 64 | + |
| 65 | + try (ImageInputStream imageInputStream = ImageIO.createImageInputStream(tempFile)) { |
| 66 | + final Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("TIFF"); |
| 67 | + |
| 68 | + assertTrue(readers.hasNext()); |
| 69 | + |
| 70 | + final ImageReader imageReader = readers.next(); |
| 71 | + |
| 72 | + try { |
| 73 | + imageReader.setInput(imageInputStream); |
| 74 | + |
| 75 | + assertTrue(imageReader.isImageTiled(0)); |
| 76 | + assertEquals(512, imageReader.getTileWidth(0)); |
| 77 | + assertEquals(512, imageReader.getTileHeight(0)); |
| 78 | + |
| 79 | + final IIOMetadata metadata = imageReader.getImageMetadata(0); |
| 80 | + assertNotNull(metadata); |
| 81 | + |
| 82 | + final String nativeFormatName = metadata.getNativeMetadataFormatName(); |
| 83 | + assertNotNull(nativeFormatName); |
| 84 | + |
| 85 | + final var root = metadata.getAsTree(nativeFormatName); |
| 86 | + |
| 87 | + final var fields = ((org.w3c.dom.Node) root).getChildNodes(); |
| 88 | + |
| 89 | + boolean lzwFound = false; |
| 90 | + |
| 91 | + for (int i = 0; i < fields.getLength(); i++) { |
| 92 | + final org.w3c.dom.Node node = fields.item(i); |
| 93 | + |
| 94 | + if ("TIFFIFD".equals(node.getNodeName())) { |
| 95 | + final var children = node.getChildNodes(); |
| 96 | + |
| 97 | + for (int j = 0; j < children.getLength(); j++) { |
| 98 | + final org.w3c.dom.Node field = children.item(j); |
| 99 | + |
| 100 | + if ("TIFFField".equals(field.getNodeName()) |
| 101 | + && field.getAttributes() != null |
| 102 | + && field.getAttributes().getNamedItem("number") != null |
| 103 | + && "259".equals(field.getAttributes().getNamedItem("number").getNodeValue())) { |
| 104 | + |
| 105 | + final var compressionValues = field.getChildNodes(); |
| 106 | + |
| 107 | + for (int k = 0; k < compressionValues.getLength(); k++) { |
| 108 | + final org.w3c.dom.Node valueContainer = compressionValues.item(k); |
| 109 | + final var values = valueContainer.getChildNodes(); |
| 110 | + |
| 111 | + for (int l = 0; l < values.getLength(); l++) { |
| 112 | + final org.w3c.dom.Node value = values.item(l); |
| 113 | + |
| 114 | + if (value.getAttributes() != null |
| 115 | + && value.getAttributes().getNamedItem("value") != null |
| 116 | + && "5".equals(value.getAttributes().getNamedItem("value").getNodeValue())) { |
| 117 | + lzwFound = true; |
| 118 | + } |
| 119 | + } |
| 120 | + } |
| 121 | + } |
| 122 | + } |
| 123 | + } |
| 124 | + } |
| 125 | + |
| 126 | + assertTrue(lzwFound); |
| 127 | + } finally { |
| 128 | + imageReader.dispose(); |
| 129 | + } |
| 130 | + } |
| 131 | + |
53 | 132 | final GeoTiffFormat geoTiffFormat = new GeoTiffFormat(); |
54 | 133 | final GridCoverageReader reader = geoTiffFormat.getReader(new ByteArrayInputStream(result)); |
55 | 134 |
|
|
0 commit comments