From cfd2a1046c798063636f63632bb3e27343adfc99 Mon Sep 17 00:00:00 2001 From: Drew Noakes Date: Sun, 14 Oct 2018 05:12:05 +0100 Subject: [PATCH] Set parent dir for ICC/Photoshop dirs in Exif --- Source/com/drew/metadata/exif/ExifTiffHandler.java | 4 ++-- .../com/drew/metadata/photoshop/PhotoshopReader.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Source/com/drew/metadata/exif/ExifTiffHandler.java b/Source/com/drew/metadata/exif/ExifTiffHandler.java index 04f66ec95..ac8c3ad19 100644 --- a/Source/com/drew/metadata/exif/ExifTiffHandler.java +++ b/Source/com/drew/metadata/exif/ExifTiffHandler.java @@ -218,14 +218,14 @@ public boolean customProcessTag(final int tagOffset, // Custom processing for ICC Profile data if (tagId == ExifSubIFDDirectory.TAG_INTER_COLOR_PROFILE) { final byte[] iccBytes = reader.getBytes(tagOffset, byteCount); - new IccReader().extract(new ByteArrayReader(iccBytes), _metadata); + new IccReader().extract(new ByteArrayReader(iccBytes), _metadata, _currentDirectory); return true; } // Custom processing for Photoshop data if (tagId == ExifSubIFDDirectory.TAG_PHOTOSHOP_SETTINGS && _currentDirectory instanceof ExifIFD0Directory) { final byte[] photoshopBytes = reader.getBytes(tagOffset, byteCount); - new PhotoshopReader().extract(new SequentialByteArrayReader(photoshopBytes), byteCount, _metadata); + new PhotoshopReader().extract(new SequentialByteArrayReader(photoshopBytes), byteCount, _metadata, _currentDirectory); return true; } diff --git a/Source/com/drew/metadata/photoshop/PhotoshopReader.java b/Source/com/drew/metadata/photoshop/PhotoshopReader.java index dd06b8638..037ad2443 100644 --- a/Source/com/drew/metadata/photoshop/PhotoshopReader.java +++ b/Source/com/drew/metadata/photoshop/PhotoshopReader.java @@ -27,6 +27,8 @@ import com.drew.lang.SequentialByteArrayReader; import com.drew.lang.SequentialReader; import com.drew.lang.annotations.NotNull; +import com.drew.lang.annotations.Nullable; +import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifReader; import com.drew.metadata.icc.IccReader; @@ -73,10 +75,18 @@ public void readJpegSegments(@NotNull Iterable segments, @NotNull Metada } public void extract(@NotNull final SequentialReader reader, int length, @NotNull final Metadata metadata) + { + extract(reader, length, metadata, null); + } + + public void extract(@NotNull final SequentialReader reader, int length, @NotNull final Metadata metadata, @Nullable final Directory parentDirectory) { PhotoshopDirectory directory = new PhotoshopDirectory(); metadata.addDirectory(directory); + if (parentDirectory != null) + directory.setParent(parentDirectory); + // Data contains a sequence of Image Resource Blocks (IRBs): // // 4 bytes - Signature; mostly "8BIM" but "PHUT", "AgHg" and "DCSR" are also found