This is an automated email from the ASF dual-hosted git repository. tallison pushed a commit to branch TIKA-4425 in repository https://gitbox.apache.org/repos/asf/tika.git
commit a11d89d783487f03dc44eebd14d92153f298fccb Author: tallison <[email protected]> AuthorDate: Fri May 30 08:19:35 2025 -0400 TIKA-4425 - extract gps timestamp --- tika-core/src/main/java/org/apache/tika/metadata/Geographic.java | 5 +++++ .../java/org/apache/tika/parser/image/ImageMetadataExtractor.java | 5 +++++ .../src/test/java/org/apache/tika/parser/image/HeifParserTest.java | 5 +++++ .../src/test/java/org/apache/tika/parser/image/JpegParserTest.java | 3 +++ 4 files changed, 18 insertions(+) diff --git a/tika-core/src/main/java/org/apache/tika/metadata/Geographic.java b/tika-core/src/main/java/org/apache/tika/metadata/Geographic.java index 3c4006f2e..f46d51189 100644 --- a/tika-core/src/main/java/org/apache/tika/metadata/Geographic.java +++ b/tika-core/src/main/java/org/apache/tika/metadata/Geographic.java @@ -42,4 +42,9 @@ public interface Geographic { */ Property ALTITUDE = Property.internalReal("geo:alt"); + /** + * This is the timestamp that derives from a gps record + */ + Property TIMESTAMP = Property.internalDate("geo:timestamp"); + } diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java index 2ad97c1e6..cabf2345b 100644 --- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java +++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java @@ -59,6 +59,7 @@ import org.w3c.dom.Document; import org.xml.sax.SAXException; import org.apache.tika.exception.TikaException; +import org.apache.tika.metadata.Geographic; import org.apache.tika.metadata.IPTC; import org.apache.tika.metadata.Metadata; import org.apache.tika.metadata.Property; @@ -636,6 +637,10 @@ public class ImageMetadataExtractor { metadata.set(TikaCoreProperties.LONGITUDE, geoDecimalFormat.format(geoLocation.getLongitude())); } + Date gpsDate = ((GpsDirectory)directory).getGpsDate(); + if (gpsDate != null) { + metadata.set(Geographic.TIMESTAMP, gpsDate); + } } } 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 b8fa07f7b..6f023a441 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 @@ -25,6 +25,7 @@ import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.Test; import org.xml.sax.helpers.DefaultHandler; +import org.apache.tika.metadata.Geographic; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.parser.ParseContext; @@ -51,6 +52,10 @@ public class HeifParserTest { assertEquals("512 pixels", metadata.get("Width")); assertEquals("512 pixels", metadata.get("Height")); assertEquals("image/heic", metadata.get(Metadata.CONTENT_TYPE)); + assertEquals("23.177917", metadata.get(Metadata.LATITUDE)); + assertEquals("113.394317", metadata.get(Metadata.LONGITUDE)); + + assertEquals("2018-02-05T07:11:43Z", metadata.get(Geographic.TIMESTAMP)); IOUtils.closeQuietly(stream); } diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/JpegParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/JpegParserTest.java index d6fbd60a3..9775b9464 100644 --- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/JpegParserTest.java +++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/test/java/org/apache/tika/parser/image/JpegParserTest.java @@ -29,6 +29,7 @@ import java.util.TimeZone; import org.junit.jupiter.api.Test; import org.xml.sax.helpers.DefaultHandler; +import org.apache.tika.metadata.Geographic; import org.apache.tika.metadata.Metadata; import org.apache.tika.metadata.TIFF; import org.apache.tika.metadata.TikaCoreProperties; @@ -148,6 +149,8 @@ public class JpegParserTest { // Geo tags should be there with 5dp, and not rounded assertEquals("51.575762", metadata.get(Metadata.LATITUDE)); assertEquals("-1.567886", metadata.get(Metadata.LONGITUDE)); + + assertEquals("2012-02-20T16:44:22Z", metadata.get(Geographic.TIMESTAMP)); } @Test
