diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageMetadata.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageMetadata.java index 1e71579e..a9fd04de 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageMetadata.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageMetadata.java @@ -71,18 +71,18 @@ public final class TIFFImageMetadata extends AbstractMetadata { /** * Creates an empty TIFF metadata object. - * + *
* Client code can update or change the metadata using the * {@link #setFromTree(String, Node)} * or {@link #mergeTree(String, Node)} methods. */ public TIFFImageMetadata() { - this(new IFD(Collections.emptyList())); + this(new IFD(Collections.emptyList())); } /** * Creates a TIFF metadata object, using the values from the given IFD. - * + *
* Client code can update or change the metadata using the * {@link #setFromTree(String, Node)} * or {@link #mergeTree(String, Node)} methods. @@ -95,7 +95,7 @@ public final class TIFFImageMetadata extends AbstractMetadata { /** * Creates a TIFF metadata object, using the values from the given entries. - * + *
* Client code can update or change the metadata using the * {@link #setFromTree(String, Node)} * or {@link #mergeTree(String, Node)} methods. @@ -493,10 +493,10 @@ public final class TIFFImageMetadata extends AbstractMetadata { compressionTypeName.setAttribute("value", "CCITT RLE"); break; case TIFFExtension.COMPRESSION_CCITT_T4: - compressionTypeName.setAttribute("value", "CCITT T4"); + compressionTypeName.setAttribute("value", "CCITT T.4"); break; case TIFFExtension.COMPRESSION_CCITT_T6: - compressionTypeName.setAttribute("value", "CCITT T6"); + compressionTypeName.setAttribute("value", "CCITT T.6"); break; case TIFFExtension.COMPRESSION_LZW: compressionTypeName.setAttribute("value", "LZW"); @@ -1038,7 +1038,7 @@ public final class TIFFImageMetadata extends AbstractMetadata { } // If we have resolution - if (xRes != null && yRes != null) { + if (xRes != null) { // yRes != null too // If old unit was DPI, convert values and keep DPI, otherwise use PPCM Entry resUnitEntry = entries.get(TIFF.TAG_RESOLUTION_UNIT); int resUnitValue = resUnitEntry != null && resUnitEntry.getValue() != null diff --git a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageMetadataTest.java b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageMetadataTest.java index e0bbf141..72a9c1ff 100644 --- a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageMetadataTest.java +++ b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageMetadataTest.java @@ -188,6 +188,102 @@ public class TIFFImageMetadataTest { assertEquals("HP IL v1.1", ((Element) textEntry).getAttribute("value")); } + @Test + public void testMetadataStandardFormat_CCITT300dpi() throws IOException { + IIOMetadata metadata = createMetadata("/tiff/CCITT-G4-300dpi-StripByteCounts0.tif"); + Node root = metadata.getAsTree(IIOMetadataFormatImpl.standardMetadataFormatName); + + // Root: "javax_imageio_1.0" + assertNotNull(root); + assertEquals(IIOMetadataFormatImpl.standardMetadataFormatName, root.getNodeName()); + assertEquals(5, root.getChildNodes().getLength()); + + // "Chroma" + Node chroma = root.getFirstChild(); + assertEquals("Chroma", chroma.getNodeName()); + + assertEquals(3, chroma.getChildNodes().getLength()); + + Node colorSpaceType = chroma.getFirstChild(); + assertEquals("ColorSpaceType", colorSpaceType.getNodeName()); + assertEquals("GRAY", ((Element) colorSpaceType).getAttribute("name")); + + Node numChannels = colorSpaceType.getNextSibling(); + assertEquals("NumChannels", numChannels.getNodeName()); + assertEquals("1", ((Element) numChannels).getAttribute("value")); + + Node blackIsZero = numChannels.getNextSibling(); + assertEquals("BlackIsZero", blackIsZero.getNodeName()); + assertEquals("FALSE", ((Element) blackIsZero).getAttribute("value")); + + // "Compression" + Node compression = chroma.getNextSibling(); + assertEquals("Compression", compression.getNodeName()); + assertEquals(2, compression.getChildNodes().getLength()); + + Node compressionTypeName = compression.getFirstChild(); + assertEquals("CompressionTypeName", compressionTypeName.getNodeName()); + assertEquals("CCITT T.6", ((Element) compressionTypeName).getAttribute("value")); + + Node lossless = compressionTypeName.getNextSibling(); + assertEquals("Lossless", lossless.getNodeName()); + assertEquals(0, lossless.getAttributes().getLength()); + + // "Data" + Node data = compression.getNextSibling(); + assertEquals("Data", data.getNodeName()); + assertEquals(4, data.getChildNodes().getLength()); + + Node planarConfiguration = data.getFirstChild(); + assertEquals("PlanarConfiguration", planarConfiguration.getNodeName()); + assertEquals("PixelInterleaved", ((Element) planarConfiguration).getAttribute("value")); + + Node sampleFormat = planarConfiguration.getNextSibling(); + assertEquals("SampleFormat", sampleFormat.getNodeName()); + assertEquals("UnsignedIntegral", ((Element) sampleFormat).getAttribute("value")); + + Node bitsPerSample = sampleFormat.getNextSibling(); + assertEquals("BitsPerSample", bitsPerSample.getNodeName()); + assertEquals("1", ((Element) bitsPerSample).getAttribute("value")); + + Node sampleMSB = bitsPerSample.getNextSibling(); + assertEquals("SampleMSB", sampleMSB.getNodeName()); + assertEquals("0", ((Element) sampleMSB).getAttribute("value")); + + // "Dimension" + Node dimension = data.getNextSibling(); + assertEquals("Dimension", dimension.getNodeName()); + assertEquals(4, dimension.getChildNodes().getLength()); + + Node pixelAspectRatio = dimension.getFirstChild(); + assertEquals("PixelAspectRatio", pixelAspectRatio.getNodeName()); + assertEquals("1.0", ((Element) pixelAspectRatio).getAttribute("value")); + + Node imageOrientation = pixelAspectRatio.getNextSibling(); + assertEquals("ImageOrientation", imageOrientation.getNodeName()); + assertEquals("Normal", ((Element) imageOrientation).getAttribute("value")); + + Node horizontalPixelSize = imageOrientation.getNextSibling(); + assertEquals("HorizontalPixelSize", horizontalPixelSize.getNodeName()); + assertEquals("0.08466666666666667", ((Element) horizontalPixelSize).getAttribute("value")); + + Node verticalPixelSize = horizontalPixelSize.getNextSibling(); + assertEquals("VerticalPixelSize", verticalPixelSize.getNodeName()); + assertEquals("0.08466666666666667", ((Element) verticalPixelSize).getAttribute("value")); + + // "Document" + Node document = dimension.getNextSibling(); + assertEquals("Document", document.getNodeName()); + assertEquals(1, document.getChildNodes().getLength()); + + Node formatVersion = document.getFirstChild(); + assertEquals("FormatVersion", formatVersion.getNodeName()); + assertEquals("6.0", ((Element) formatVersion).getAttribute("value")); + + // No more elements + assertNull(document.getNextSibling()); + } + @Test public void testMetadataNativeFormat() throws IOException { IIOMetadata metadata = createMetadata("/tiff/quad-lzw.tif");