From 454ee32791c61754c9a43c79b5eb5e975e7a4635 Mon Sep 17 00:00:00 2001 From: Oliver Schmidtmer Date: Fri, 20 May 2016 14:39:55 +0200 Subject: [PATCH] Fallback for missing TIFFTag.PhotometricInterpretation --- .../imageio/plugins/tiff/TIFFImageReader.java | 35 ++++++++++++++- .../plugins/tiff/TIFFImageReaderTest.java | 41 +++++++++++++++++- .../guessPhotometric/flower-rgb-contig-08.tif | Bin 0 -> 9753 bytes .../flower-separated-planar-08.tif | Bin 0 -> 12927 bytes .../tiff/guessPhotometric/group4.tif | Bin 0 -> 266 bytes 5 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 imageio/imageio-tiff/src/test/resources/tiff/guessPhotometric/flower-rgb-contig-08.tif create mode 100644 imageio/imageio-tiff/src/test/resources/tiff/guessPhotometric/flower-separated-planar-08.tif create mode 100644 imageio/imageio-tiff/src/test/resources/tiff/guessPhotometric/group4.tif diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java index 0613620c..a88e8385 100755 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java @@ -315,7 +315,7 @@ public class TIFFImageReader extends ImageReaderBase { int sampleFormat = getSampleFormat(); int planarConfiguration = getValueAsIntWithDefault(TIFF.TAG_PLANAR_CONFIGURATION, TIFFBaseline.PLANARCONFIG_CHUNKY); - int interpretation = getValueAsInt(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, "PhotometricInterpretation"); + int interpretation = getPhotometricInterpretationWithFallback(); int samplesPerPixel = getValueAsIntWithDefault(TIFF.TAG_SAMPLES_PER_PIXEL, 1); int bitsPerSample = getBitsPerSample(); int dataType = getDataType(sampleFormat, bitsPerSample); @@ -545,6 +545,37 @@ public class TIFFImageReader extends ImageReaderBase { } } + private int getPhotometricInterpretationWithFallback() throws IIOException { + // PhotometricInterpretation is a required TAG, but as it can be guessed this does a fallback that is equal to JAI ImageIO. + int interpretation = getValueAsIntWithDefault(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, "PhotometricInterpretation", -1); + if (interpretation == -1) { + int compression = getValueAsIntWithDefault(TIFF.TAG_COMPRESSION, TIFFBaseline.COMPRESSION_NONE); + int samplesPerPixel = getValueAsIntWithDefault(TIFF.TAG_SAMPLES_PER_PIXEL, 1); + Entry extraSamplesEntry = currentIFD.getEntryById(TIFF.TAG_EXTRA_SAMPLES); + int extraSamples = extraSamplesEntry == null ? 0 : extraSamplesEntry.valueCount(); + + if (compression == TIFFBaseline.COMPRESSION_CCITT_MODIFIED_HUFFMAN_RLE + || compression == TIFFExtension.COMPRESSION_CCITT_T4 + || compression == TIFFExtension.COMPRESSION_CCITT_T6) { + interpretation = TIFFBaseline.PHOTOMETRIC_WHITE_IS_ZERO; + } + else if (currentIFD.getEntryById(TIFF.TAG_COLOR_MAP) != null) { + interpretation = TIFFBaseline.PHOTOMETRIC_PALETTE; + } + else if ((samplesPerPixel - extraSamples) == 3) { + interpretation = TIFFBaseline.PHOTOMETRIC_RGB; + } + else if ((samplesPerPixel - extraSamples) == 4) { + interpretation = TIFFExtension.PHOTOMETRIC_SEPARATED; + } + else { + interpretation = TIFFBaseline.PHOTOMETRIC_BLACK_IS_ZERO; + } + processWarningOccurred("Missing PhotometricInterpretation, determining fallback: " + interpretation); + } + return interpretation; + } + private int getOpaqueSamplesPerPixel(final int photometricInterpretation) throws IIOException { switch (photometricInterpretation) { case TIFFBaseline.PHOTOMETRIC_WHITE_IS_ZERO: @@ -730,7 +761,7 @@ public class TIFFImageReader extends ImageReaderBase { WritableRaster destRaster = clipToRect(destination.getRaster(), dstRegion, param != null ? param.getDestinationBands() : null); - final int interpretation = getValueAsInt(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, "PhotometricInterpretation"); + final int interpretation = getPhotometricInterpretationWithFallback(); final int compression = getValueAsIntWithDefault(TIFF.TAG_COMPRESSION, TIFFBaseline.COMPRESSION_NONE); final int predictor = getValueAsIntWithDefault(TIFF.TAG_PREDICTOR, 1); final int planarConfiguration = getValueAsIntWithDefault(TIFF.TAG_PLANAR_CONFIGURATION, TIFFBaseline.PLANARCONFIG_CHUNKY); diff --git a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java index 075c7620..a5832db8 100644 --- a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java +++ b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java @@ -29,7 +29,9 @@ package com.twelvemonkeys.imageio.plugins.tiff;/* import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest; import org.junit.Test; +import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; +import javax.imageio.ImageReader; import javax.imageio.event.IIOReadWarningListener; import javax.imageio.spi.ImageReaderSpi; import javax.imageio.stream.ImageInputStream; @@ -39,9 +41,9 @@ import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.*; import static org.mockito.Matchers.contains; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; @@ -329,4 +331,39 @@ public class TIFFImageReaderTest extends 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 w!zr7~7Z?r^ggg;pG@2XpF literal 0 HcmV?d00001 diff --git a/imageio/imageio-tiff/src/test/resources/tiff/guessPhotometric/flower-separated-planar-08.tif b/imageio/imageio-tiff/src/test/resources/tiff/guessPhotometric/flower-separated-planar-08.tif new file mode 100644 index 0000000000000000000000000000000000000000..ad0bfea87e77d8d3742c31527906f6abf8d3b9ad GIT binary patch literal 12927 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 literal 0 HcmV?d00001 diff --git a/imageio/imageio-tiff/src/test/resources/tiff/guessPhotometric/group4.tif b/imageio/imageio-tiff/src/test/resources/tiff/guessPhotometric/group4.tif new file mode 100644 index 0000000000000000000000000000000000000000..0dee7750b3c16feffb87a8e02b80dbf00c3d1a93 GIT binary patch literal 266 zcmebD)M5}|U|?Vo|JuO8(7?dYz`)4Nzz7s!17b!fn+3>bg0ew!%t+$@|3lORg&DYz z)Ce-NfX(3miVGo$iz2bbkjxQ>s%HnPmqAja31l;Y3bYJlj39dcm4gR!wNSUfFF4MZ=PIg=Aa+i+cH2GIb3wG`0+ literal 0 HcmV?d00001