mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-03 03:25:28 -04:00
#300 TIFF old style JPEG inconsistent metadata
(cherry picked from commit 753afd0)
This commit is contained in:
parent
41e6b041c9
commit
ad86bcda7e
@ -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
|
||||
|
@ -220,6 +220,25 @@ public class TIFFImageReaderTest extends ImageReaderAbstractTest<TIFFImageReader
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadOldStyleJPEGInconsistentMetadata() throws IOException {
|
||||
TestData testData = new TestData(getClassLoaderResource("/tiff/old-style-jpeg-inconsistent-metadata.tif"), new Dimension(2483, 3515));
|
||||
|
||||
try (ImageInputStream stream = testData.getInputStream()) {
|
||||
TIFFImageReader reader = createReader();
|
||||
reader.setInput(stream);
|
||||
|
||||
IIOReadWarningListener warningListener = mock(IIOReadWarningListener.class);
|
||||
reader.addIIOReadWarningListener(warningListener);
|
||||
|
||||
BufferedImage image = reader.read(0);
|
||||
|
||||
assertNotNull(image);
|
||||
assertEquals(testData.getDimension(0), new Dimension(image.getWidth(), image.getHeight()));
|
||||
verify(warningListener, atLeastOnce()).warningOccurred(eq(reader), contains("metadata"));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadIncompatibleICCProfileIgnoredWithWarning() throws IOException {
|
||||
TestData testData = new TestData(getClassLoaderResource("/tiff/rgb-with-embedded-cmyk-icc.tif"), new Dimension(1500, 1500));
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user