You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2023/05/03 15:59:35 UTC

[tika] branch main updated: TIKA-4025 -- extract Java's ImageReader's num images into the metadata. (#1108)

This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new c01c048a9 TIKA-4025 -- extract Java's ImageReader's num images into the metadata. (#1108)
c01c048a9 is described below

commit c01c048a979c5d80026c111b47431b230ba1b0a9
Author: Tim Allison <ta...@apache.org>
AuthorDate: Wed May 3 11:59:29 2023 -0400

    TIKA-4025 -- extract Java's ImageReader's num images into the metadata. (#1108)
---
 .../main/java/org/apache/tika/metadata/TikaCoreProperties.java   | 6 ++++++
 .../src/main/java/org/apache/tika/parser/image/ImageParser.java  | 9 ++++++++-
 .../test/java/org/apache/tika/parser/image/ImageParserTest.java  | 5 +++++
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/tika-core/src/main/java/org/apache/tika/metadata/TikaCoreProperties.java b/tika-core/src/main/java/org/apache/tika/metadata/TikaCoreProperties.java
index e49144354..7abe6377f 100644
--- a/tika-core/src/main/java/org/apache/tika/metadata/TikaCoreProperties.java
+++ b/tika-core/src/main/java/org/apache/tika/metadata/TikaCoreProperties.java
@@ -291,6 +291,12 @@ public interface TikaCoreProperties {
      */
     Property RATING = XMP.RATING;
 
+    /**
+     * This is the number of images (as in a multi-frame gif) returned by
+     * Java's {@link javax.imageio.ImageReader#getNumImages(boolean)}.  See
+     * the javadocs for known limitations.
+     */
+    Property NUM_IMAGES = Property.internalInteger("imagereader:NumImages");
 
     // Comment and rating properties
     /**
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ImageParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ImageParser.java
index 855a4a023..3a75b6d89 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ImageParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ImageParser.java
@@ -171,7 +171,14 @@ public class ImageParser extends AbstractImageParser {
                     try (ImageInputStream imageStream = ImageIO
                             .createImageInputStream(new CloseShieldInputStream(stream))) {
                         reader.setInput(imageStream);
-
+                        try {
+                            int numImages = reader.getNumImages(true);
+                            if (numImages > -1) {
+                                metadata.set(TikaCoreProperties.NUM_IMAGES, numImages);
+                            }
+                        } catch (IllegalStateException e) {
+                            //ignore
+                        }
                         metadata.set(Metadata.IMAGE_WIDTH, Integer.toString(reader.getWidth(0)));
                         metadata.set(Metadata.IMAGE_LENGTH, Integer.toString(reader.getHeight(0)));
                         metadata.set("height", Integer.toString(reader.getHeight(0)));
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/ImageParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/ImageParserTest.java
index 6bdc54d3b..085c7bd81 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/ImageParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/ImageParserTest.java
@@ -55,6 +55,7 @@ public class ImageParserTest extends TikaTest {
         assertEquals("100", metadata.get(Metadata.IMAGE_WIDTH));
         assertEquals("75", metadata.get(Metadata.IMAGE_LENGTH));
         assertEquals("8 8 8", metadata.get(Metadata.BITS_PER_SAMPLE));
+        assertEquals(1, metadata.getInt(TikaCoreProperties.NUM_IMAGES));
     }
 
     @Test
@@ -98,6 +99,7 @@ public class ImageParserTest extends TikaTest {
                         "more contributor license agreements.  See the NOTICE file distributed " +
                         "with this work for additional information regarding copyright ownership.",
                 metadata.get(TikaCoreProperties.COMMENTS));
+        assertEquals(1, metadata.getInt(TikaCoreProperties.NUM_IMAGES));
     }
 
     @Test
@@ -149,6 +151,7 @@ public class ImageParserTest extends TikaTest {
                         "more contributor license agreements.  See the NOTICE file distributed " +
                         "with this work for additional information regarding copyright ownership.",
                 metadata.get(TikaCoreProperties.COMMENTS));
+        assertEquals(1, metadata.getInt(TikaCoreProperties.NUM_IMAGES));
     }
 
     @Test
@@ -199,6 +202,7 @@ public class ImageParserTest extends TikaTest {
         assertEquals("100", metadata.get(Metadata.IMAGE_WIDTH));
         assertEquals("75", metadata.get(Metadata.IMAGE_LENGTH));
         assertEquals("8 8 8", metadata.get(Metadata.BITS_PER_SAMPLE));
+        assertEquals(1, metadata.getInt(TikaCoreProperties.NUM_IMAGES));
     }
 
     @Test // TIKA-2232
@@ -211,6 +215,7 @@ public class ImageParserTest extends TikaTest {
         assertEquals("78", metadata.get("height"));
         assertEquals("328", metadata.get("width"));
         assertEquals("image/x-jbig2", metadata.get("Content-Type"));
+        assertEquals(1, metadata.getInt(TikaCoreProperties.NUM_IMAGES));
     }
 
     @Test