From ea74ac271453524b395b19f2aee406550db13778 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Sat, 30 Jan 2021 17:09:00 +0100 Subject: [PATCH] JPEG Exif/thumbnail fixes pt II. --- .../imageio/plugins/jpeg/JPEGImageReader.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java index f7e80c1f..af312269 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java @@ -62,6 +62,7 @@ import java.awt.color.ICC_ColorSpace; import java.awt.color.ICC_Profile; import java.awt.image.*; import java.io.*; +import java.nio.ByteOrder; import java.util.List; import java.util.*; @@ -1146,6 +1147,7 @@ public final class JPEGImageReader extends ImageReaderBase { if (jpegLength > 0 && jpegOffset + jpegLength <= stream.length()) { // Verify first bytes are FFD8 stream.seek(jpegOffset); + stream.setByteOrder(ByteOrder.BIG_ENDIAN); if (stream.readUnsignedShort() == JPEG.SOI) { thumbnails.add(new EXIFThumbnailReader(thumbnailProgressDelegator, getThumbnailReader(), 0, thumbnails.size(), ifd1, stream)); } @@ -1173,7 +1175,9 @@ public final class JPEGImageReader extends ImageReaderBase { // EXIFThumbnailReader? thumbnails.add(new EXIFThumbnailReader(thumbnailProgressDelegator, getThumbnailReader(), 0, thumbnails.size(), ifd1, stream)); } - + else { + processWarningOccurred("EXIF IFD with empty or incomplete uncompressed thumbnail"); + } } else { processWarningOccurred("EXIF IFD with uncompressed thumbnail missing StripOffsets tag"); @@ -1230,7 +1234,15 @@ public final class JPEGImageReader extends ImageReaderBase { public BufferedImage readThumbnail(int imageIndex, int thumbnailIndex) throws IOException { checkThumbnailBounds(imageIndex, thumbnailIndex); - return thumbnails.get(thumbnailIndex).read(); +// processThumbnailStarted(imageIndex, thumbnailIndex); +// processThumbnailProgress(0f); + + BufferedImage thumbnail = thumbnails.get(thumbnailIndex).read();; + +// processThumbnailProgress(100f); +// processThumbnailComplete(); + + return thumbnail; } // Metadata