Class XmpReader

java.lang.Object
com.drew.metadata.xmp.XmpReader
All Implemented Interfaces:
JpegSegmentMetadataReader

public class XmpReader extends Object implements JpegSegmentMetadataReader
Extracts XMP data from JPEG APP1 segments.

Note that XMP uses a namespace and path format for identifying values, which does not map to metadata-extractor's integer based tag identifiers. Therefore, XMP data is extracted and exposed via XmpDirectory.getXMPMeta() which returns an instance of Adobe's XMPMeta which exposes the full XMP data set.

The extraction is done with Adobe's XmpCore-Library (XMP-Toolkit) Copyright (c) 1999 - 2007, Adobe Systems Incorporated All rights reserved.

  • Field Details

    • XMP_JPEG_PREAMBLE

      private static final String XMP_JPEG_PREAMBLE
      See Also:
    • XMP_EXTENSION_JPEG_PREAMBLE

      private static final String XMP_EXTENSION_JPEG_PREAMBLE
      See Also:
    • SCHEMA_XMP_NOTES

      private static final String SCHEMA_XMP_NOTES
      See Also:
    • ATTRIBUTE_EXTENDED_XMP

      private static final String ATTRIBUTE_EXTENDED_XMP
      See Also:
    • PARSE_OPTIONS

      private static final com.adobe.internal.xmp.options.ParseOptions PARSE_OPTIONS
    • EXTENDED_XMP_GUID_LENGTH

      private static final int EXTENDED_XMP_GUID_LENGTH
      Extended XMP constants
      See Also:
    • EXTENDED_XMP_INT_LENGTH

      private static final int EXTENDED_XMP_INT_LENGTH
      See Also:
  • Constructor Details

    • XmpReader

      public XmpReader()
  • Method Details

    • getSegmentTypes

      public Iterable<JpegSegmentType> getSegmentTypes()
      Description copied from interface: JpegSegmentMetadataReader
      Gets the set of JPEG segment types that this reader is interested in.
      Specified by:
      getSegmentTypes in interface JpegSegmentMetadataReader
    • readJpegSegments

      public void readJpegSegments(Iterable<byte[]> segments, Metadata metadata, JpegSegmentType segmentType)
      Version specifically for dealing with XMP found in JPEG segments. This form of XMP has a peculiar preamble, which must be removed before parsing the XML.
      Specified by:
      readJpegSegments in interface JpegSegmentMetadataReader
      Parameters:
      segments - The byte array from which the metadata should be extracted.
      metadata - The Metadata object into which extracted values should be merged.
      segmentType - The JpegSegmentType being read.
    • extract

      public void extract(byte[] xmpBytes, Metadata metadata)
      Performs the XMP data extraction, adding found values to the specified instance of Metadata.

      The extraction is done with Adobe's XMPCore library.

    • extract

      public void extract(byte[] xmpBytes, Metadata metadata, Directory parentDirectory)
      Performs the XMP data extraction, adding found values to the specified instance of Metadata.

      The extraction is done with Adobe's XMPCore library.

    • extract

      public void extract(byte[] xmpBytes, int offset, int length, Metadata metadata, Directory parentDirectory)
      Performs the XMP data extraction, adding found values to the specified instance of Metadata.

      The extraction is done with Adobe's XMPCore library.

    • extract

      public void extract(String xmpString, Metadata metadata)
      Performs the XMP data extraction, adding found values to the specified instance of Metadata.

      The extraction is done with Adobe's XMPCore library.

    • extract

      public void extract(StringValue xmpString, Metadata metadata)
      Performs the XMP data extraction, adding found values to the specified instance of Metadata.

      The extraction is done with Adobe's XMPCore library.

    • extract

      public void extract(String xmpString, Metadata metadata, Directory parentDirectory)
      Performs the XMP data extraction, adding found values to the specified instance of Metadata.

      The extraction is done with Adobe's XMPCore library.

    • getExtendedXMPGUID

      private static String getExtendedXMPGUID(Metadata metadata)
      Determine if there is an extended XMP section based on the standard XMP part. The xmpNote:HasExtendedXMP attribute contains the GUID of the Extended XMP chunks.
    • processExtendedXMPChunk

      private static byte[] processExtendedXMPChunk(Metadata metadata, byte[] segmentBytes, String extendedXMPGUID, byte[] extendedXMPBuffer)
      Process an Extended XMP chunk. It will read the bytes from segmentBytes and validates that the GUID the requested one. It will progressively fill the buffer with each chunk. The format is specified in this document: http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart3.pdf at page 19