Class TiffParser

java.lang.Object
loci.formats.tiff.TiffParser
All Implemented Interfaces:
Closeable, AutoCloseable

public class TiffParser extends Object implements Closeable
Parses TIFF data from an input source.
Author:
Curtis Rueden ctrueden at wisc.edu, Eric Kjellman egkjellman at wisc.edu, Melissa Linkert melissa at glencoesoftware.com, Chris Allan callan at blackcat.ca
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private boolean
    Whether or not the TIFF file contains BigTIFF data.
    private byte[]
    Cached tile buffer to avoid re-allocations when reading tiles.
    private boolean
     
    private CodecOptions
    Codec options to be used when decoding compressed pixel data.
    private boolean
     
    private boolean
     
    private boolean
    Whether or not 64-bit offsets are used for non-BigTIFF files.
    private IFD
    Cached first IFD in the current file.
    private IFDList
    Cached list of IFDs in the current file.
    protected loci.common.RandomAccessInputStream
    Input source from which to parse TIFF data.
    private static final org.slf4j.Logger
     
    private String
     
    private boolean
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    TiffParser(String filename)
    Constructs a new TIFF parser from the given file name.
    TiffParser(loci.common.RandomAccessInputStream in)
    Constructs a new TIFF parser from the given input source.
  • Method Summary

    Modifier and Type
    Method
    Description
    Checks the TIFF header.
    void
    Close the underlying stream, if this TiffParser was constructed with a file path.
    void
    Fill in IFD entries that are stored at an arbitrary offset.
    Retrieves the current set of codec options being used to decompress pixel data.
    int[]
    Retrieve the color map associated with the given IFD.
    Convenience method for obtaining a stream's first ImageDescription.
    Returns EXIF IFDs.
    Gets the first IFD within the TIFF file, or null if the input source is not a valid TIFF file.
    Retrieve a given entry from the first IFD in the stream.
    long
    Gets offset to the first IFD, or -1 if stream is not TIFF.
    getIFD(long offset)
    Gets the IFD stored at the given offset.
    long[]
    Gets the offsets to every IFD in the file.
    Deprecated.
    Retrieve the value corresponding to the given TiffIFDEntry.
    Returns the main list of IFDs in the file.
    (package private) long
    getNextOffset(long previous)
    Read a file offset.
    Returns non-thumbnail IFDs.
    byte[]
    getSamples(IFD ifd, byte[] buf)
     
    byte[]
    getSamples(IFD ifd, byte[] buf, int x, int y, long width, long height)
     
    byte[]
    getSamples(IFD ifd, byte[] buf, int x, int y, long width, long height, int overlapX, int overlapY)
     
    loci.common.RandomAccessInputStream
    Gets the stream from which TIFF data is being parsed.
    Returns the SUBIFDS belonging to a given IFD.
    Returns thumbnail IFDs.
    byte[]
    getTile(IFD ifd, byte[] buf, int row, int col)
     
    boolean
    Returns whether or not the current TIFF file contains BigTIFF data.
    boolean
    Tests this stream to see if it represents a TIFF file.
    (package private) TiffIFDEntry
     
    void
    setAssumeEqualStrips(boolean equalStrips)
    Sets whether or not to assume that strips are of equal size.
    void
    Sets the codec options to be used when decompressing pixel data.
    void
    setDoCaching(boolean doCaching)
    Sets whether or not IFD entries should be cached.
    void
    setEncoding(String encoding)
    Sets the encoding to use for tags with ASCII values.
    void
    setUse64BitOffsets(boolean use64Bit)
    Sets whether or not 64-bit offsets are used for non-BigTIFF files.
    void
    setYCbCrCorrection(boolean correctionAllowed)
    Sets whether or not YCbCr color correction is allowed.
    static void
    unpackBytes(byte[] samples, int startIndex, byte[] bytes, IFD ifd)
    Extracts pixel information from the given byte array according to the bits per sample, photometric interpretation and color map IFD directory entry values, and the specified byte ordering.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • LOGGER

      private static final org.slf4j.Logger LOGGER
    • in

      protected transient loci.common.RandomAccessInputStream in
      Input source from which to parse TIFF data.
    • cachedTileBuffer

      private byte[] cachedTileBuffer
      Cached tile buffer to avoid re-allocations when reading tiles.
    • bigTiff

      private boolean bigTiff
      Whether or not the TIFF file contains BigTIFF data.
    • fakeBigTiff

      private boolean fakeBigTiff
      Whether or not 64-bit offsets are used for non-BigTIFF files.
    • ycbcrCorrection

      private boolean ycbcrCorrection
    • equalStrips

      private boolean equalStrips
    • doCaching

      private boolean doCaching
    • ifdList

      private IFDList ifdList
      Cached list of IFDs in the current file.
    • firstIFD

      private IFD firstIFD
      Cached first IFD in the current file.
    • codecOptions

      private CodecOptions codecOptions
      Codec options to be used when decoding compressed pixel data.
    • canClose

      private boolean canClose
    • tagEncoding

      private String tagEncoding
  • Constructor Details

    • TiffParser

      public TiffParser(String filename) throws IOException
      Constructs a new TIFF parser from the given file name.
      Throws:
      IOException
    • TiffParser

      public TiffParser(loci.common.RandomAccessInputStream in)
      Constructs a new TIFF parser from the given input source.
  • Method Details

    • close

      public void close() throws IOException
      Close the underlying stream, if this TiffParser was constructed with a file path. Closing a stream that was pre-initialized is potentially dangerous.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • setAssumeEqualStrips

      public void setAssumeEqualStrips(boolean equalStrips)
      Sets whether or not to assume that strips are of equal size.
      Parameters:
      equalStrips - Whether or not the strips are of equal size.
    • setCodecOptions

      public void setCodecOptions(CodecOptions codecOptions)
      Sets the codec options to be used when decompressing pixel data.
      Parameters:
      codecOptions - Codec options to use.
    • getCodecOptions

      public CodecOptions getCodecOptions()
      Retrieves the current set of codec options being used to decompress pixel data.
      Returns:
      See above.
    • setDoCaching

      public void setDoCaching(boolean doCaching)
      Sets whether or not IFD entries should be cached.
    • setUse64BitOffsets

      public void setUse64BitOffsets(boolean use64Bit)
      Sets whether or not 64-bit offsets are used for non-BigTIFF files.
    • setYCbCrCorrection

      public void setYCbCrCorrection(boolean correctionAllowed)
      Sets whether or not YCbCr color correction is allowed.
    • setEncoding

      public void setEncoding(String encoding)
      Sets the encoding to use for tags with ASCII values. Defaults to UTF-8 if unset.
    • getStream

      public loci.common.RandomAccessInputStream getStream()
      Gets the stream from which TIFF data is being parsed.
    • isValidHeader

      public boolean isValidHeader()
      Tests this stream to see if it represents a TIFF file.
    • checkHeader

      public Boolean checkHeader() throws IOException
      Checks the TIFF header.
      Returns:
      true if little-endian, false if big-endian, or null if not a TIFF.
      Throws:
      IOException
    • isBigTiff

      public boolean isBigTiff()
      Returns whether or not the current TIFF file contains BigTIFF data.
    • getMainIFDs

      public IFDList getMainIFDs() throws IOException
      Returns the main list of IFDs in the file. This does not include SUBIFDS.
      Throws:
      IOException
    • getSubIFDs

      public IFDList getSubIFDs(IFD ifd) throws IOException
      Returns the SUBIFDS belonging to a given IFD.
      Throws:
      IOException
    • getIFDs

      @Deprecated public IFDList getIFDs() throws IOException
      Deprecated.
      Returns all IFDs in the file, including SUBIFDS.
      Throws:
      IOException
    • getThumbnailIFDs

      public IFDList getThumbnailIFDs() throws IOException
      Returns thumbnail IFDs.
      Throws:
      IOException
    • getNonThumbnailIFDs

      public IFDList getNonThumbnailIFDs() throws IOException
      Returns non-thumbnail IFDs.
      Throws:
      IOException
    • getExifIFDs

      public IFDList getExifIFDs() throws FormatException, IOException
      Returns EXIF IFDs.
      Throws:
      FormatException
      IOException
    • getIFDOffsets

      public long[] getIFDOffsets() throws IOException
      Gets the offsets to every IFD in the file.
      Throws:
      IOException
    • getFirstIFD

      public IFD getFirstIFD() throws IOException
      Gets the first IFD within the TIFF file, or null if the input source is not a valid TIFF file.
      Throws:
      IOException
    • getFirstIFDEntry

      public TiffIFDEntry getFirstIFDEntry(int tag) throws IOException
      Retrieve a given entry from the first IFD in the stream.
      Parameters:
      tag - the tag of the entry to be retrieved.
      Returns:
      an object representing the entry's fields.
      Throws:
      IOException - when there is an error accessing the stream.
      IllegalArgumentException - when the tag number is unknown.
    • getFirstOffset

      public long getFirstOffset() throws IOException
      Gets offset to the first IFD, or -1 if stream is not TIFF.
      Throws:
      IOException
    • getIFD

      public IFD getIFD(long offset) throws IOException
      Gets the IFD stored at the given offset.
      Throws:
      IOException
    • fillInIFD

      public void fillInIFD(IFD ifd) throws IOException
      Fill in IFD entries that are stored at an arbitrary offset.
      Throws:
      IOException
    • getIFDValue

      public Object getIFDValue(TiffIFDEntry entry) throws IOException
      Retrieve the value corresponding to the given TiffIFDEntry.
      Throws:
      IOException
    • getComment

      public String getComment() throws IOException
      Convenience method for obtaining a stream's first ImageDescription.
      Throws:
      IOException
    • getColorMap

      public int[] getColorMap(IFD ifd) throws IOException
      Retrieve the color map associated with the given IFD.
      Throws:
      IOException
    • getTile

      public byte[] getTile(IFD ifd, byte[] buf, int row, int col) throws FormatException, IOException
      Throws:
      FormatException
      IOException
    • getSamples

      public byte[] getSamples(IFD ifd, byte[] buf) throws FormatException, IOException
      Throws:
      FormatException
      IOException
    • getSamples

      public byte[] getSamples(IFD ifd, byte[] buf, int x, int y, long width, long height) throws FormatException, IOException
      Throws:
      FormatException
      IOException
    • getSamples

      public byte[] getSamples(IFD ifd, byte[] buf, int x, int y, long width, long height, int overlapX, int overlapY) throws FormatException, IOException
      Throws:
      FormatException
      IOException
    • unpackBytes

      public static void unpackBytes(byte[] samples, int startIndex, byte[] bytes, IFD ifd) throws FormatException
      Extracts pixel information from the given byte array according to the bits per sample, photometric interpretation and color map IFD directory entry values, and the specified byte ordering. No error checking is performed.
      Throws:
      FormatException
    • getNextOffset

      long getNextOffset(long previous) throws IOException
      Read a file offset. For bigTiff, a 64-bit number is read. For other Tiffs, a 32-bit number is read and possibly adjusted for a possible carry-over from the previous offset.
      Throws:
      IOException
    • readTiffIFDEntry

      TiffIFDEntry readTiffIFDEntry() throws IOException
      Throws:
      IOException