Class TIFFImageEncoder

java.lang.Object
org.apache.xmlgraphics.image.codec.util.ImageEncoderImpl
org.apache.xmlgraphics.image.codec.tiff.TIFFImageEncoder
All Implemented Interfaces:
ImageEncoder

public class TIFFImageEncoder extends ImageEncoderImpl
A baseline TIFF writer. The writer outputs TIFF images in either Bilevel, Greyscale, Palette color or Full Color modes.
  • Field Details

    • TIFF_JPEG_TABLES

      private static final int TIFF_JPEG_TABLES
      See Also:
    • TIFF_YCBCR_SUBSAMPLING

      private static final int TIFF_YCBCR_SUBSAMPLING
      See Also:
    • TIFF_YCBCR_POSITIONING

      private static final int TIFF_YCBCR_POSITIONING
      See Also:
    • TIFF_REF_BLACK_WHITE

      private static final int TIFF_REF_BLACK_WHITE
      See Also:
    • SIZE_OF_TYPE

      private static final int[] SIZE_OF_TYPE
  • Constructor Details

  • Method Details

    • encode

      public void encode(RenderedImage im) throws IOException
      Encodes a RenderedImage and writes the output to the OutputStream associated with this ImageEncoder.
      Specified by:
      encode in interface ImageEncoder
      Specified by:
      encode in class ImageEncoderImpl
      Throws:
      IOException
    • encodeMultiple

      public Object encodeMultiple(Object context, RenderedImage img) throws IOException
      Encodes a RenderedImage as part of a multi-page file and writes the output to the OutputStream associated with this ImageEncoder.

      When you sent all pages, make sure you call finishMultiple() in the end. Otherwise, the generated file will be corrupted.

      Parameters:
      context - the context object you receive as return value to a previous call to encodeMultiple(). Set null for the first image.
      img - the image
      Returns:
      a context object needed for writing multiple pages for a single image file
      Throws:
      IOException - In case of an I/O error
    • finishMultiple

      public void finishMultiple(Object context) throws IOException
      Signals the encoder that you've finished sending pages for a multi-page image files.
      Parameters:
      context - the context object you receive as return value to a previous call to encodeMultiple()
      Throws:
      IOException - In case of an I/O error
    • encode

      private int encode(RenderedImage im, TIFFEncodeParam encodeParam, int ifdOffset, boolean isLast) throws IOException
      Throws:
      IOException
    • validateImage

      private void validateImage(int dataTypeSize, int[] sampleSize, int numBands, int dataType, ColorModel colorModel)
    • getDirectorySize

      private int getDirectorySize(SortedSet fields)
      Calculates the size of the IFD.
    • writeFileHeader

      private void writeFileHeader() throws IOException
      Throws:
      IOException
    • writeDirectory

      private void writeDirectory(int thisIFDOffset, SortedSet fields, int nextIFDOffset) throws IOException
      Throws:
      IOException
    • getValueSize

      private static int getValueSize(TIFFField field) throws UnsupportedEncodingException
      Determine the number of bytes in the value portion of the field.
      Throws:
      UnsupportedEncodingException
    • writeValuesAsFourBytes

      private void writeValuesAsFourBytes(TIFFField field) throws IOException
      Throws:
      IOException
    • writeValues

      private void writeValues(TIFFField field) throws IOException
      Throws:
      IOException
    • writeUnsignedShort

      private void writeUnsignedShort(int s) throws IOException
      Throws:
      IOException
    • writeLong

      private void writeLong(long l) throws IOException
      despite its name, this method writes only 4 bytes to output.
      Parameters:
      l - 32bits of this are written as 4 bytes
      Throws:
      IOException
    • compressPackBits

      private static int compressPackBits(byte[] data, int numRows, long bytesPerRow, byte[] compData)
      Performs PackBits compression on a tile of data.
    • packBits

      private static int packBits(byte[] input, int inOffset, int inCount, byte[] output, int outOffset)
      Performs PackBits compression for a single buffer of data. This should be called for each row of each tile. The returned value is the offset into the output buffer after compression.
    • deflate

      private static int deflate(Deflater deflater, byte[] inflated, byte[] deflated)