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 5961f6e5..f1236f30 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 @@ -1008,7 +1008,7 @@ public class TIFFImageReader extends ImageReaderBase { // TODO: If we have non-standard reference B/W or yCbCr coefficients, // we might still have to do extra color space conversion... if (needsCSConversion == null) { - needsCSConversion = needsCSConversion(interpretation, jpegReader.getImageMetadata(0)); + needsCSConversion = needsCSConversion(interpretation, readJPEGMetadataSafe(jpegReader)); } if (!needsCSConversion) { @@ -1146,7 +1146,7 @@ public class TIFFImageReader extends ImageReaderBase { jpegParam.setSourceSubsampling(xSub, ySub, 0, 0); if (needsCSConversion == null) { - needsCSConversion = needsCSConversion(interpretation, jpegReader.getImageMetadata(0)); + needsCSConversion = needsCSConversion(interpretation, readJPEGMetadataSafe(jpegReader)); } if (!needsCSConversion) { @@ -1251,7 +1251,7 @@ public class TIFFImageReader extends ImageReaderBase { Point offset = new Point(col - srcRegion.x, row - srcRegion.y); if (needsCSConversion == null) { - needsCSConversion = needsCSConversion(interpretation, jpegReader.getImageMetadata(0)); + needsCSConversion = needsCSConversion(interpretation, readJPEGMetadataSafe(jpegReader)); } if (!needsCSConversion) { @@ -1319,6 +1319,17 @@ public class TIFFImageReader extends ImageReaderBase { return destination; } + private IIOMetadata readJPEGMetadataSafe(final ImageReader jpegReader) throws IOException { + try { + return jpegReader.getImageMetadata(0); + } + catch (IIOException e) { + processWarningOccurred("Could not read metadata metadata JPEG compressed TIFF: " + e.getMessage() + " colors may look incorrect"); + + return null; + } + } + private boolean needsCSConversion(final int photometricInterpretation, final IIOMetadata imageMetadata) throws IOException { if (imageMetadata == null) { // Assume we're ok 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 08bbf63d..2a31d136 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 @@ -220,6 +220,25 @@ public class TIFFImageReaderTest extends ImageReaderAbstractTest