Package com.itextpdf.io.codec
Class TIFFDirectory
java.lang.Object
com.itextpdf.io.codec.TIFFDirectory
A class representing an Image File Directory (IFD) from a TIFF 6.0
stream. The TIFF file format is described in more detail in the
comments for the TIFFDescriptor class.
A TIFF IFD consists of a set of TIFFField tags. Methods are
provided to query the set of tags and to obtain the raw field
array. In addition, convenience methods are provided for acquiring
the values of tags that contain a single value that fits into a
byte, int, long, float, or double.
Every TIFF file is made up of one or more public IFDs that are
joined in a linked list, rooted in the file header. A file may
also contain so-called private IFDs that are referenced from
tag data and do not appear in the main list.
This class is not a committed part of the JAI API. It may be removed or changed in future releases of JAI.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionA Hashtable indexing the fields by tag number.(package private) TIFFField[]
An array of TIFFFields.(package private) long
The offset of this IFD.(package private) boolean
A boolean storing the endianness of the stream.(package private) long
The offset of the next IFD.(package private) int
The number of entries in the IFD.private static final int[]
-
Constructor Summary
ConstructorsConstructorDescriptionThe default constructor.TIFFDirectory
(RandomAccessFileOrArray stream, int directory) Constructs a TIFFDirectory from a SeekableStream.TIFFDirectory
(RandomAccessFileOrArray stream, long ifd_offset, int directory) Constructs a TIFFDirectory by reading a SeekableStream. -
Method Summary
Modifier and TypeMethodDescriptiongetField
(int tag) Returns the value of a given tag as a TIFFField, or null if the tag is not present.byte
getFieldAsByte
(int tag) Returns the value of index 0 of a given tag as a byte.byte
getFieldAsByte
(int tag, int index) Returns the value of a particular index of a given tag as a byte.double
getFieldAsDouble
(int tag) Returns the value of index 0 of a given tag as a double.double
getFieldAsDouble
(int tag, int index) Returns the value of a particular index of a given tag as a double.float
getFieldAsFloat
(int tag) Returns the value of index 0 of a given tag as a float.float
getFieldAsFloat
(int tag, int index) Returns the value of a particular index of a given tag as a float.long
getFieldAsLong
(int tag) Returns the value of index 0 of a given tag as a long.long
getFieldAsLong
(int tag, int index) Returns the value of a particular index of a given tag as a long.Returns an array of TIFFFields containing all the fields in this directory.long
Returns the offset of the IFD corresponding to thisTIFFDirectory
.long
Returns the offset of the next IFD after the IFD corresponding to thisTIFFDirectory
.static int
Returns the number of image directories (subimages) stored in a given TIFF file, represented by aSeekableStream
.int
Returns the number of directory entries.int[]
getTags()
Returns an ordered array of integers indicating the tags values.private void
initialize
(RandomAccessFileOrArray stream) boolean
Returns a boolean indicating whether the byte order used in the TIFF file is big-endian (i.e.boolean
isTagPresent
(int tag) Returns true if a tag appears in the directory.private static boolean
isValidEndianTag
(int endian) private double
readDouble
(RandomAccessFileOrArray stream) private float
readFloat
(RandomAccessFileOrArray stream) private int
readInt
(RandomAccessFileOrArray stream) private long
readLong
(RandomAccessFileOrArray stream) private short
readShort
(RandomAccessFileOrArray stream) private long
private static long
readUnsignedInt
(RandomAccessFileOrArray stream, boolean isBigEndian) private int
private static int
readUnsignedShort
(RandomAccessFileOrArray stream, boolean isBigEndian)
-
Field Details
-
isBigEndian
boolean isBigEndianA boolean storing the endianness of the stream. -
numEntries
int numEntriesThe number of entries in the IFD. -
fields
TIFFField[] fieldsAn array of TIFFFields. -
fieldIndex
A Hashtable indexing the fields by tag number. -
IFDOffset
long IFDOffsetThe offset of this IFD. -
nextIFDOffset
long nextIFDOffsetThe offset of the next IFD. -
sizeOfType
private static final int[] sizeOfType
-
-
Constructor Details
-
TIFFDirectory
TIFFDirectory()The default constructor. -
TIFFDirectory
Constructs a TIFFDirectory from a SeekableStream. The directory parameter specifies which directory to read from the linked list present in the stream; directory 0 is normally read but it is possible to store multiple images in a single TIFF file by maintaining multiple directories.- Parameters:
stream
- a SeekableStream to read from.directory
- the index of the directory to read.- Throws:
IOException
- in case of any I/O error.
-
TIFFDirectory
public TIFFDirectory(RandomAccessFileOrArray stream, long ifd_offset, int directory) throws IOException Constructs a TIFFDirectory by reading a SeekableStream. The ifd_offset parameter specifies the stream offset from which to begin reading; this mechanism is sometimes used to store private IFDs within a TIFF file that are not part of the normal sequence of IFDs.- Parameters:
stream
- a SeekableStream to read from.ifd_offset
- the long byte offset of the directory.directory
- the index of the directory to read beyond the one at the current stream offset; zero indicates the IFD at the current offset.- Throws:
IOException
- in case of any I/O error.
-
-
Method Details
-
isValidEndianTag
private static boolean isValidEndianTag(int endian) -
initialize
- Throws:
IOException
-
getNumEntries
public int getNumEntries()Returns the number of directory entries.- Returns:
- The number of directory entries
-
getField
Returns the value of a given tag as a TIFFField, or null if the tag is not present.- Parameters:
tag
- The tag- Returns:
- The value of the given tag as a TIFFField or null
-
isTagPresent
public boolean isTagPresent(int tag) Returns true if a tag appears in the directory.- Parameters:
tag
- The tag- Returns:
- True if the tag appears in the directory, false otherwise
-
getTags
public int[] getTags()Returns an ordered array of integers indicating the tags values.- Returns:
- an ordered array of integers indicating the tags
-
getFields
Returns an array of TIFFFields containing all the fields in this directory.- Returns:
- an array of TIFFFields containing all the fields in this directory
-
getFieldAsByte
public byte getFieldAsByte(int tag, int index) Returns the value of a particular index of a given tag as a byte. The caller is responsible for ensuring that the tag is present and has type TIFFField.TIFF_SBYTE, TIFF_BYTE, or TIFF_UNDEFINED.- Parameters:
tag
- The tagindex
- The index- Returns:
- the value of a particular index of a given tag as a byte
-
getFieldAsByte
public byte getFieldAsByte(int tag) Returns the value of index 0 of a given tag as a byte. The caller is responsible for ensuring that the tag is present and has type TIFFField.TIFF_SBYTE, TIFF_BYTE, or TIFF_UNDEFINED.- Parameters:
tag
- The tag- Returns:
- The value of index 0 of the given tag as a byte
-
getFieldAsLong
public long getFieldAsLong(int tag, int index) Returns the value of a particular index of a given tag as a long. The caller is responsible for ensuring that the tag is present and has type TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED, TIFF_SHORT, TIFF_SSHORT, TIFF_SLONG or TIFF_LONG.- Parameters:
tag
- The tagindex
- The index- Returns:
- The value of the given index of the given tag as a long
-
getFieldAsLong
public long getFieldAsLong(int tag) Returns the value of index 0 of a given tag as a long. The caller is responsible for ensuring that the tag is present and has type TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED, TIFF_SHORT, TIFF_SSHORT, TIFF_SLONG or TIFF_LONG.- Parameters:
tag
- The tag- Returns:
- The value of index 0 of the given tag as a long
-
getFieldAsFloat
public float getFieldAsFloat(int tag, int index) Returns the value of a particular index of a given tag as a float. The caller is responsible for ensuring that the tag is present and has numeric type (all but TIFF_UNDEFINED and TIFF_ASCII).- Parameters:
tag
- The tagindex
- The index- Returns:
- The value of the given index of the given tag as a float
-
getFieldAsFloat
public float getFieldAsFloat(int tag) Returns the value of index 0 of a given tag as a float. The caller is responsible for ensuring that the tag is present and has numeric type (all but TIFF_UNDEFINED and TIFF_ASCII).- Parameters:
tag
- The tag- Returns:
- The value of index 0 of the given tag as a float
-
getFieldAsDouble
public double getFieldAsDouble(int tag, int index) Returns the value of a particular index of a given tag as a double. The caller is responsible for ensuring that the tag is present and has numeric type (all but TIFF_UNDEFINED and TIFF_ASCII).- Parameters:
tag
- The tagindex
- The index- Returns:
- The value of the given index of the given tag as a double
-
getFieldAsDouble
public double getFieldAsDouble(int tag) Returns the value of index 0 of a given tag as a double. The caller is responsible for ensuring that the tag is present and has numeric type (all but TIFF_UNDEFINED and TIFF_ASCII).- Parameters:
tag
- The tag- Returns:
- The value of index 0 of the given tag as a double
-
readShort
- Throws:
IOException
-
readUnsignedShort
- Throws:
IOException
-
readInt
- Throws:
IOException
-
readUnsignedInt
- Throws:
IOException
-
readLong
- Throws:
IOException
-
readFloat
- Throws:
IOException
-
readDouble
- Throws:
IOException
-
readUnsignedShort
private static int readUnsignedShort(RandomAccessFileOrArray stream, boolean isBigEndian) throws IOException - Throws:
IOException
-
readUnsignedInt
private static long readUnsignedInt(RandomAccessFileOrArray stream, boolean isBigEndian) throws IOException - Throws:
IOException
-
getNumDirectories
Returns the number of image directories (subimages) stored in a given TIFF file, represented by aSeekableStream
.- Parameters:
stream
- RandomAccessFileOrArray- Returns:
- The number of image directories (subimages) stored in a given TIFF file
- Throws:
IOException
- in case of any I/O error.
-
isBigEndian
public boolean isBigEndian()Returns a boolean indicating whether the byte order used in the TIFF file is big-endian (i.e. whether the byte order is from the most significant to the least significant)- Returns:
true
if the byte order used in the TIFF file is big-endian
-
getIFDOffset
public long getIFDOffset()Returns the offset of the IFD corresponding to thisTIFFDirectory
.- Returns:
- the offset of the IFD corresponding to this
TIFFDirectory
.
-
getNextIFDOffset
public long getNextIFDOffset()Returns the offset of the next IFD after the IFD corresponding to thisTIFFDirectory
.- Returns:
- the offset of the next IFD after the IFD corresponding to this
TIFFDirectory
.
-