Class TIFFDirectory
- java.lang.Object
-
- com.github.jaiimageio.plugins.tiff.TIFFDirectory
-
- All Implemented Interfaces:
java.lang.Cloneable
- Direct Known Subclasses:
TIFFIFD
public class TIFFDirectory extends java.lang.Object implements java.lang.Cloneable
A convenience class for simplifying interaction with TIFF native image metadata. A TIFF image metadata tree represents an Image File Directory (IFD) from a TIFF 6.0 stream. An IFD consists of a number of IFD Entries each of which associates an identifying tag number with a compatible value. ATIFFDirectory
instance corresponds to an IFD and contains a set ofTIFFField
s each of which corresponds to an IFD Entry in the IFD.When reading, a
TIFFDirectory
may be created by passing the value returned byImageReader.getImageMetadata()
tocreateFromMetadata()
. TheTIFFField
s in the directory may then be obtained using the accessor methods provided in this class.When writing, an
IIOMetadata
object for use by one of thewrite() methods of ImageWriter
may be created from aTIFFDirectory
bygetAsMetadata()
. TheTIFFDirectory
itself may be created by construction or from theIIOMetadata
object returned byImageWriter.getDefaultImageMetadata()
. TheTIFFField
s in the directory may be set using the mutator methods provided in this class.A
TIFFDirectory
is aware of the tag numbers in the group ofTIFFTagSet
s associated with it. When aTIFFDirectory
is created from a native image metadata object, these tag sets are derived from the tagSets attribute of the TIFFIFD node.A
TIFFDirectory
might also have a parentTIFFTag
. This will occur if the directory represents an IFD other than the root IFD of the image. The parent tag is the tag of the IFD Entry which is a pointer to the IFD represented by thisTIFFDirectory
. TheTIFFTag.isIFDPointer()
method of this parentTIFFTag
must returntrue
. When aTIFFDirectory
is created from a native image metadata object, the parent tag set is set from the parentTagName attribute of the corresponding TIFFIFD node. Note that aTIFFDirectory
instance which has a non-null
parent tag will be contained in the data field of aTIFFField
instance which has a tag field equal to the contained directory's parent tag.As an example consider an EXIF image. The
TIFFDirectory
instance corresponding to the EXIF IFD in the EXIF stream would have parent tagTAG_EXIF_IFD_POINTER
and would includeEXIFTIFFTagSet
in its group of known tag sets. TheTIFFDirectory
corresponding to this EXIF IFD will be contained in the data field of aTIFFField
which will in turn be contained in theTIFFDirectory
corresponding to the primary IFD of the EXIF image which will itself have anull
-valued parent tag.Note that this implementation is not synchronized. If multiple threads use a
TIFFDirectory
instance concurrently, and at least one of the threads modifies the directory, for example, by adding or removingTIFFField
s orTIFFTagSet
s, it must be synchronized externally.- Since:
- 1.1-beta
- See Also:
IIOMetadata
,TIFFField
,TIFFTag
,TIFFTagSet
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map
highFields
A mapping ofInteger
tag numbers toTIFFField
s for fields which are not low tag numbered.private TIFFField[]
lowFields
The fields in this directory which have a low tag number.private static int
MAX_LOW_FIELD_TAG_NUM
The largest low-valued tag number in the TIFF 6.0 specification.private int
numLowFields
The number of low tag numbered fields in the directory.private TIFFTag
parentTag
The parentTIFFTag
of this directory.private java.util.List
tagSets
TheTIFFTagSets
associated with this directory.
-
Constructor Summary
Constructors Constructor Description TIFFDirectory(TIFFTagSet[] tagSets, TIFFTag parentTag)
Constructs aTIFFDirectory
which is aware of a given group ofTIFFTagSet
s.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addTagSet(TIFFTagSet tagSet)
Adds an element to the group ofTIFFTagSet
s of which this directory is aware.void
addTIFFField(TIFFField f)
Adds a TIFF field to the directory.java.lang.Object
clone()
Clones the directory and all the fields contained therein.boolean
containsTIFFField(int tagNumber)
Determines whether a TIFF field with the given tag number is contained in this directory.static TIFFDirectory
createFromMetadata(javax.imageio.metadata.IIOMetadata tiffImageMetadata)
Creates aTIFFDirectory
instance from the contents of an image metadata object.javax.imageio.metadata.IIOMetadata
getAsMetadata()
Converts the directory to a metadata object.private static TIFFIFD
getDirectoryAsIFD(TIFFDirectory dir)
Converts aTIFFDirectory
to aTIFFIFD
.int
getNumTIFFFields()
Returns the number ofTIFFField
s in this directory.TIFFTag
getParentTag()
Returns the parentTIFFTag
of this directory if one has been defined ornull
otherwise.TIFFTag
getTag(int tagNumber)
Returns theTIFFTag
which has tag number equal totagNumber
ornull
if no such tag exists in theTIFFTagSet
s associated with this directory.TIFFTagSet[]
getTagSets()
Returns theTIFFTagSet
s of which this directory is aware.TIFFField
getTIFFField(int tagNumber)
Retrieves a TIFF field from the directory.TIFFField[]
getTIFFFields()
Retrieves all TIFF fields from the directory.void
removeTagSet(TIFFTagSet tagSet)
Removes an element from the group ofTIFFTagSet
s of which this directory is aware.void
removeTIFFField(int tagNumber)
Removes a TIFF field from the directory.void
removeTIFFFields()
Removes all TIFF fields from the directory.
-
-
-
Field Detail
-
MAX_LOW_FIELD_TAG_NUM
private static final int MAX_LOW_FIELD_TAG_NUM
The largest low-valued tag number in the TIFF 6.0 specification.- See Also:
- Constant Field Values
-
tagSets
private java.util.List tagSets
TheTIFFTagSets
associated with this directory.
-
parentTag
private TIFFTag parentTag
The parentTIFFTag
of this directory.
-
lowFields
private TIFFField[] lowFields
The fields in this directory which have a low tag number. These are managed as an array for efficiency as they are the most common fields.
-
numLowFields
private int numLowFields
The number of low tag numbered fields in the directory.
-
highFields
private java.util.Map highFields
A mapping ofInteger
tag numbers toTIFFField
s for fields which are not low tag numbered.
-
-
Constructor Detail
-
TIFFDirectory
public TIFFDirectory(TIFFTagSet[] tagSets, TIFFTag parentTag)
Constructs aTIFFDirectory
which is aware of a given group ofTIFFTagSet
s. An optional parentTIFFTag
may also be specified.- Parameters:
tagSets
- TheTIFFTagSets
associated with this directory.parentTag
- The parentTIFFTag
of this directory; may benull
.- Throws:
java.lang.IllegalArgumentException
- iftagSets
isnull
.
-
-
Method Detail
-
createFromMetadata
public static TIFFDirectory createFromMetadata(javax.imageio.metadata.IIOMetadata tiffImageMetadata) throws javax.imageio.metadata.IIOInvalidTreeException
Creates aTIFFDirectory
instance from the contents of an image metadata object. The supplied object must support an image metadata format supported by the TIFFImageWriter
plug-in. This will usually be either the TIFF native image metadata format com_sun_media_imageio_plugins_tiff_1.0 or the Java Image I/O standard metadata format javax_imageio_1.0.- Parameters:
tiffImageMetadata
- A metadata object which supports a compatible image metadata format.- Returns:
- A
TIFFDirectory
populated from the contents of the supplied metadata object. - Throws:
java.lang.IllegalArgumentException
- iftiffImageMetadata
isnull
.java.lang.IllegalArgumentException
- iftiffImageMetadata
does not support a compatible image metadata format.javax.imageio.metadata.IIOInvalidTreeException
- if the supplied metadata object cannot be parsed.
-
getDirectoryAsIFD
private static TIFFIFD getDirectoryAsIFD(TIFFDirectory dir)
Converts aTIFFDirectory
to aTIFFIFD
.
-
getTagSets
public TIFFTagSet[] getTagSets()
Returns theTIFFTagSet
s of which this directory is aware.- Returns:
- The
TIFFTagSet
s associated with thisTIFFDirectory
.
-
addTagSet
public void addTagSet(TIFFTagSet tagSet)
Adds an element to the group ofTIFFTagSet
s of which this directory is aware.- Parameters:
tagSet
- TheTIFFTagSet
to add.- Throws:
java.lang.IllegalArgumentException
- iftagSet
isnull
.
-
removeTagSet
public void removeTagSet(TIFFTagSet tagSet)
Removes an element from the group ofTIFFTagSet
s of which this directory is aware.- Parameters:
tagSet
- TheTIFFTagSet
to remove.- Throws:
java.lang.IllegalArgumentException
- iftagSet
isnull
.
-
getParentTag
public TIFFTag getParentTag()
Returns the parentTIFFTag
of this directory if one has been defined ornull
otherwise.- Returns:
- The parent
TIFFTag
of thisTIFFDiectory
ornull
.
-
getTag
public TIFFTag getTag(int tagNumber)
Returns theTIFFTag
which has tag number equal totagNumber
ornull
if no such tag exists in theTIFFTagSet
s associated with this directory.- Parameters:
tagNumber
- The tag number of interest.- Returns:
- The corresponding
TIFFTag
ornull
.
-
getNumTIFFFields
public int getNumTIFFFields()
Returns the number ofTIFFField
s in this directory.- Returns:
- The number of
TIFFField
s in thisTIFFDirectory
.
-
containsTIFFField
public boolean containsTIFFField(int tagNumber)
Determines whether a TIFF field with the given tag number is contained in this directory.- Returns:
- Whether a
TIFFTag
with tag number equal totagNumber
is present in thisTIFFDirectory
.
-
addTIFFField
public void addTIFFField(TIFFField f)
Adds a TIFF field to the directory.- Parameters:
f
- The field to add.- Throws:
java.lang.IllegalArgumentException
- iff
isnull
.
-
getTIFFField
public TIFFField getTIFFField(int tagNumber)
Retrieves a TIFF field from the directory.- Parameters:
tagNumber
- The tag number of the tag associated with the field.- Returns:
- A
TIFFField
with the requested tag number ofnull
if no such field is present.
-
removeTIFFField
public void removeTIFFField(int tagNumber)
Removes a TIFF field from the directory.- Parameters:
tagNumber
- The tag number of the tag associated with the field.
-
getTIFFFields
public TIFFField[] getTIFFFields()
Retrieves all TIFF fields from the directory.- Returns:
- An array of all TIFF fields in order of numerically increasing tag number.
-
removeTIFFFields
public void removeTIFFFields()
Removes all TIFF fields from the directory.
-
getAsMetadata
public javax.imageio.metadata.IIOMetadata getAsMetadata()
Converts the directory to a metadata object.- Returns:
- A metadata instance initialized from the contents of this
TIFFDirectory
.
-
clone
public java.lang.Object clone()
Clones the directory and all the fields contained therein.- Overrides:
clone
in classjava.lang.Object
- Returns:
- A clone of this
TIFFDirectory
.
-
-