diff --git a/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java b/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java index 7e48e656bc..211b114552 100644 --- a/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java +++ b/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java @@ -407,7 +407,11 @@ public byte[] getIccProfileBytes(final ByteSource byteSource, final GifImagingPa @Override public ImageInfo getImageInfo(final ByteSource byteSource, final GifImagingParameters params) throws ImagingException, IOException { - final GifImageContents blocks = readFile(byteSource, false); + boolean stopReadingBeforeImageData = true; + if (params != null) { + stopReadingBeforeImageData = params.getStopReadingBeforeImageData(); + } + final GifImageContents blocks = readFile(byteSource, stopReadingBeforeImageData); final GifHeaderInfo bhi = blocks.gifHeaderInfo; if (bhi == null) { @@ -482,7 +486,11 @@ public Dimension getImageSize(final ByteSource byteSource, final GifImagingParam @Override public ImageMetadata getMetadata(final ByteSource byteSource, final GifImagingParameters params) throws ImagingException, IOException { - final GifImageContents imageContents = readFile(byteSource, false); + boolean stopReadingBeforeImageData = true; + if (params != null) { + stopReadingBeforeImageData = params.getStopReadingBeforeImageData(); + } + final GifImageContents imageContents = readFile(byteSource, stopReadingBeforeImageData); final GifHeaderInfo bhi = imageContents.gifHeaderInfo; if (bhi == null) { diff --git a/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java index 720dfd8ccb..1bca589be2 100644 --- a/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java +++ b/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java @@ -25,5 +25,14 @@ * @since 1.0-alpha3 */ public class GifImagingParameters extends XmpImagingParameters { - // empty + private boolean stopReadingBeforeImageData; + + public boolean getStopReadingBeforeImageData() { + return stopReadingBeforeImageData; + } + + public void setStopReadingBeforeImageData(final boolean stopReadingBeforeImageData) { + this.stopReadingBeforeImageData = stopReadingBeforeImageData; + } + } diff --git a/src/test/java/org/apache/commons/imaging/formats/gif/GifReadTest.java b/src/test/java/org/apache/commons/imaging/formats/gif/GifReadTest.java index 69d1280ad7..8b75d96234 100644 --- a/src/test/java/org/apache/commons/imaging/formats/gif/GifReadTest.java +++ b/src/test/java/org/apache/commons/imaging/formats/gif/GifReadTest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.stream.Stream; +import org.apache.commons.imaging.common.ImageMetadata; import org.apache.commons.imaging.ImageInfo; import org.apache.commons.imaging.Imaging; import org.apache.commons.imaging.ImagingException; @@ -116,7 +117,7 @@ public void testImageDimensions(final File imageFile) throws Exception { int width = 0; int height = 0; - for(int i = 0; i < images.size(); i++) { + for (int i = 0; i < images.size(); i++) { final BufferedImage image = images.get(i); final GifImageMetadataItem metadataItem = metadata.getItems().get(i); final int xOffset = metadataItem.getLeftPosition(); @@ -139,11 +140,15 @@ public void testImageInfo(final File imageFile) throws Exception { // TODO assert more } - @Disabled(value = "RoundtripTest has to be fixed before implementation can throw UnsupportedOperationException") @ParameterizedTest @MethodSource("data") - public void testMetadata(final File imageFile) { - assertThrows(UnsupportedOperationException.class, () -> Imaging.getMetadata(imageFile)); + public void testMetadata(final File imageFile) throws IOException { + final ImageMetadata metadata = Imaging.getMetadata(imageFile); + assertNotNull(metadata); + assertTrue(metadata instanceof GifImageMetadata); + assertTrue(((GifImageMetadata)metadata).getWidth() > 0); + assertTrue(((GifImageMetadata)metadata).getHeight() > 0); + assertNotNull(metadata.getItems()); } /**