This is an automated email from the ASF dual-hosted git repository.
tballison 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 e505b4aa21 TIKA-4870: Parse AVIF, do not only detect it (#3116)
e505b4aa21 is described below
commit e505b4aa21544fd045bb1781466f1e40ce581348
Author: Dominik Schmidt <[email protected]>
AuthorDate: Wed Sep 2 22:51:01 2026 +0200
TIKA-4870: Parse AVIF, do not only detect it (#3116)
---
CHANGES.txt | 4 ++++
.../org/apache/tika/parser/image/HeifParser.java | 8 +++++---
.../apache/tika/parser/image/HeifParserTest.java | 22 +++++++++++++++++++++
.../resources/test-documents/testAVIF_XMP.avif | Bin 0 -> 1053 bytes
4 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 2684295d7c..0d7c4604cd 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,9 @@
Release 4.1.0 - unreleased
+ * AVIF images are parsed rather than only detected: HeifParser accepts
+ image/avif, which is the same ISO-BMFF container, so dimensions, EXIF
+ and XMP come out of it the way they do for HEIC (TIKA-4870).
+
* The video of a Google/Android motion photo, appended after the image and
described by the Motion Photo or MicroVideo XMP, is emitted as an
ATTACHMENT embedded document named after what the file declares it to
diff --git
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/HeifParser.java
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/HeifParser.java
index f49f594763..e6a1940346 100644
---
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/HeifParser.java
+++
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/HeifParser.java
@@ -21,6 +21,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@@ -39,9 +40,10 @@ import org.apache.tika.parser.ParseContext;
@TikaComponent
public class HeifParser extends AbstractImageParser {
- private static final Set<MediaType> SUPPORTED_TYPES = new HashSet<>(
- Arrays.asList(MediaType.image("heif"),
MediaType.image("heif-sequence"),
- MediaType.image("heic"),
MediaType.image("heic-sequence")));
+ private static final Set<MediaType> SUPPORTED_TYPES =
Collections.unmodifiableSet(
+ new HashSet<>(Arrays.asList(MediaType.image("heif"),
MediaType.image("heif-sequence"),
+ MediaType.image("heic"), MediaType.image("heic-sequence"),
+ MediaType.image("avif"))));
@Override
public Set<MediaType> getSupportedTypes(ParseContext context) {
diff --git
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/HeifParserTest.java
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/HeifParserTest.java
index 55ebf47280..6c5e6c98b1 100644
---
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/HeifParserTest.java
+++
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/HeifParserTest.java
@@ -26,6 +26,7 @@ import org.apache.tika.io.TikaInputStream;
import org.apache.tika.metadata.Geographic;
import org.apache.tika.metadata.HttpHeaders;
import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
@@ -84,4 +85,25 @@ public class HeifParserTest extends TikaTest {
}
}
+ /*
+ testAVIF_XMP.avif is a 32x32 gradient encoded with libavif through
+ ImageMagick, with an XMP packet attached: AVIF is the same ISO-BMFF
+ container, so the same parser reads it (TIKA-4870).
+ */
+ @Test
+ public void testAvif() throws Exception {
+ Metadata metadata = new Metadata();
+ try (TikaInputStream tis =
getResourceAsStream("/test-documents/testAVIF_XMP.avif")) {
+ parser.parse(tis, new DefaultHandler(), metadata, new
ParseContext());
+
+ assertEquals("image/avif", metadata.get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("avif",
metadata.get(ImageMetadataExtractor.UNKNOWN_IMG_NS + "Major Brand"));
+ assertEquals("32 pixels",
metadata.get(ImageMetadataExtractor.UNKNOWN_IMG_NS + "Width"));
+ assertEquals("32 pixels",
metadata.get(ImageMetadataExtractor.UNKNOWN_IMG_NS + "Height"));
+ //the XMP item is found through meta/iinf/iloc, as it is for HEIC
+ assertEquals("AVIF XMP Title",
metadata.get(TikaCoreProperties.TITLE));
+ assertEquals("Jane Photographer",
metadata.get(TikaCoreProperties.CREATOR));
+ }
+ }
+
}
diff --git
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/resources/test-documents/testAVIF_XMP.avif
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/resources/test-documents/testAVIF_XMP.avif
new file mode 100644
index 0000000000..eeb4e98f0a
Binary files /dev/null and
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/resources/test-documents/testAVIF_XMP.avif
differ