CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-twelvemonkeys-imageio--imageio-tiff

ImageIO plugin for Aldus/Adobe Tagged Image File Format (TIFF)

Pending
Overview
Eval results
Files

image-operations.mddocs/

Image Operations

Core TIFF and BigTIFF image reading and writing functionality with comprehensive format support, multi-page document handling, and advanced features like tiled images and extensive color space support.

Capabilities

TIFF Image Reading

Reads TIFF and BigTIFF files with comprehensive format support including multi-page documents, various compression algorithms, and advanced features like tiled images.

/**
 * Main TIFF/BigTIFF image reader with comprehensive format support
 */
class TIFFImageReader extends ImageReader {
    /**
     * Get the number of images in the TIFF file
     * @param allowSearch whether to search the entire file if necessary
     * @return number of images/pages in the file
     */
    public int getNumImages(boolean allowSearch);
    
    /**
     * Get the width of the specified image
     * @param imageIndex zero-based image index
     * @return image width in pixels
     */
    public int getWidth(int imageIndex);
    
    /**
     * Get the height of the specified image  
     * @param imageIndex zero-based image index
     * @return image height in pixels
     */
    public int getHeight(int imageIndex);
    
    /**
     * Get the raw image type specifier for the image
     * @param imageIndex zero-based image index
     * @return ImageTypeSpecifier representing the raw image format
     */
    public ImageTypeSpecifier getRawImageType(int imageIndex);
    
    /**
     * Get all supported image types for reading
     * @param imageIndex zero-based image index
     * @return Iterator of supported ImageTypeSpecifier objects
     */
    public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex);
    
    /**
     * Read the specified image as a BufferedImage
     * @param imageIndex zero-based image index
     * @param param read parameters (can be null)
     * @return BufferedImage containing the image data
     */
    public BufferedImage read(int imageIndex, ImageReadParam param);
    
    /**
     * Check if raster reading is supported (always returns true)
     * @return true - raster reading is supported
     */
    public boolean canReadRaster();
    
    /**
     * Read the specified image as a Raster
     * @param imageIndex zero-based image index  
     * @param param read parameters (can be null)
     * @return Raster containing the raw image data
     */
    public Raster readRaster(int imageIndex, ImageReadParam param);
    
    /**
     * Check if the image uses tiling
     * @param imageIndex zero-based image index
     * @return true if the image is tiled
     */
    public boolean isImageTiled(int imageIndex);
    
    /**
     * Get tile width for tiled images
     * @param imageIndex zero-based image index
     * @return tile width in pixels
     */
    public int getTileWidth(int imageIndex);
    
    /**
     * Get tile height for tiled images
     * @param imageIndex zero-based image index
     * @return tile height in pixels
     */
    public int getTileHeight(int imageIndex);
    
    /**
     * Read a specific tile as BufferedImage
     * @param imageIndex zero-based image index
     * @param tileX tile X coordinate
     * @param tileY tile Y coordinate
     * @return BufferedImage containing the tile data
     */
    public BufferedImage readTile(int imageIndex, int tileX, int tileY);
    
    /**
     * Read a specific tile as Raster
     * @param imageIndex zero-based image index
     * @param tileX tile X coordinate
     * @param tileY tile Y coordinate
     * @return Raster containing the tile data
     */
    public Raster readTileRaster(int imageIndex, int tileX, int tileY);
    
    /**
     * Get TIFF-specific image metadata
     * @param imageIndex zero-based image index
     * @return TIFFImageMetadata containing TIFF tags and metadata
     */
    public IIOMetadata getImageMetadata(int imageIndex);
    
    /**
     * Get TIFF-specific stream metadata
     * @return TIFFStreamMetadata containing stream-level metadata
     */
    public IIOMetadata getStreamMetadata();
}

Usage Examples:

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import java.awt.image.BufferedImage;
import java.io.File;

// Reading a single TIFF image
BufferedImage image = ImageIO.read(new File("example.tiff"));

// Reading multi-page TIFF with explicit reader
ImageReader reader = ImageIO.getImageReadersByFormatName("TIFF").next();
reader.setInput(ImageIO.createImageInputStream(new File("multipage.tiff")));

int numImages = reader.getNumImages(true);
System.out.println("Found " + numImages + " pages");

for (int i = 0; i < numImages; i++) {
    BufferedImage page = reader.read(i);
    System.out.println("Page " + i + ": " + page.getWidth() + "x" + page.getHeight());
}

reader.dispose();

// Reading tiled TIFF
reader = ImageIO.getImageReadersByFormatName("TIFF").next();
reader.setInput(ImageIO.createImageInputStream(new File("tiled.tiff")));

if (reader.isImageTiled(0)) {
    int tileWidth = reader.getTileWidth(0);
    int tileHeight = reader.getTileHeight(0);
    BufferedImage firstTile = reader.readTile(0, 0, 0);
}

reader.dispose();

TIFF Image Writing

Writes TIFF and BigTIFF files with support for various compression algorithms, multi-page documents, and comprehensive metadata preservation.

/**
 * Main TIFF/BigTIFF image writer with multi-page support
 */
class TIFFImageWriter extends ImageWriter {
    /**
     * Set the output destination for writing
     * @param output ImageOutputStream, File, or other supported output
     */
    public void setOutput(Object output);
    
    /**
     * Write a single image with optional metadata
     * @param streamMetadata stream-level metadata (can be null)
     * @param image IIOImage containing image data and metadata
     * @param param write parameters for compression settings
     */
    public void write(IIOMetadata streamMetadata, IIOImage image, ImageWriteParam param);
    
    /**
     * Get default image metadata for the specified image type
     * @param imageType image type specifier
     * @param param write parameters
     * @return default TIFFImageMetadata instance
     */
    public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType, ImageWriteParam param);
    
    /**
     * Convert metadata from another format to TIFF format
     * @param inData input metadata
     * @param imageType target image type
     * @param param write parameters
     * @return converted TIFFImageMetadata
     */
    public IIOMetadata convertImageMetadata(IIOMetadata inData, ImageTypeSpecifier imageType, ImageWriteParam param);
    
    /**
     * Get default stream metadata
     * @param param write parameters
     * @return default TIFFStreamMetadata instance
     */
    public IIOMetadata getDefaultStreamMetadata(ImageWriteParam param);
    
    /**
     * Convert stream metadata to TIFF format
     * @param inData input stream metadata
     * @param param write parameters
     * @return converted TIFFStreamMetadata
     */
    public IIOMetadata convertStreamMetadata(IIOMetadata inData, ImageWriteParam param);
    
    /**
     * Get default write parameters (returns TIFFImageWriteParam)
     * @return TIFFImageWriteParam with default settings
     */
    public ImageWriteParam getDefaultWriteParam();
    
    /**
     * Check if sequence writing is supported (always returns true)
     * @return true - multi-page writing is supported
     */
    public boolean canWriteSequence();
    
    /**
     * Prepare for writing a multi-page document
     * @param streamMetadata stream metadata for the document
     */
    public void prepareWriteSequence(IIOMetadata streamMetadata);
    
    /**
     * Write a page to the multi-page sequence
     * @param image IIOImage containing page data and metadata
     * @param param write parameters
     */
    public void writeToSequence(IIOImage image, ImageWriteParam param);
    
    /**
     * Finish writing the multi-page document
     */
    public void endWriteSequence();
}

Usage Examples:

import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.IIOImage;
import com.twelvemonkeys.imageio.plugins.tiff.TIFFImageWriteParam;
import java.awt.image.BufferedImage;
import java.io.File;

// Writing a single TIFF image
BufferedImage image = // ... create or load image
ImageIO.write(image, "TIFF", new File("output.tiff"));

// Writing with compression
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIFF").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("compressed.tiff")));

TIFFImageWriteParam writeParam = (TIFFImageWriteParam) writer.getDefaultWriteParam();
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType("LZW");

writer.write(null, new IIOImage(image, null, null), writeParam);
writer.dispose();

// Writing multi-page TIFF
writer = ImageIO.getImageWritersByFormatName("TIFF").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("multipage.tiff")));

writer.prepareWriteSequence(null);

BufferedImage[] pages = // ... array of images
for (BufferedImage page : pages) {
    writer.writeToSequence(new IIOImage(page, null, null), writeParam);
}

writer.endWriteSequence();
writer.dispose();

Service Provider Registration

The plugin automatically registers service providers with Java's ImageIO framework, enabling automatic format detection and plugin selection.

/**
 * Standard TIFF image reading service provider
 */
class TIFFImageReaderSpi extends ImageReaderSpi {
    public TIFFImageReaderSpi();
    
    /**
     * Test if the input source contains TIFF format data
     * @param source input source (ImageInputStream, File, etc.)
     * @return true if source contains TIFF data
     */
    public boolean canDecodeInput(Object source);
    
    /**
     * Create a new TIFFImageReader instance
     * @param extension optional extension object
     * @return new TIFFImageReader instance
     */
    public ImageReader createReaderInstance(Object extension);
    
    /**
     * Get human-readable description of the provider
     * @param locale locale for localization
     * @return description string
     */
    public String getDescription(Locale locale);
}

/**
 * Standard TIFF image writing service provider
 */
class TIFFImageWriterSpi extends ImageWriterSpi {
    public TIFFImageWriterSpi();
    
    /**
     * Test if the image type can be encoded to TIFF
     * @param type image type specifier
     * @return true if type can be encoded
     */
    public boolean canEncodeImage(ImageTypeSpecifier type);
    
    /**
     * Create a new TIFFImageWriter instance
     * @param extension optional extension object  
     * @return new TIFFImageWriter instance
     */
    public ImageWriter createWriterInstance(Object extension);
    
    /**
     * Get human-readable description of the provider
     * @param locale locale for localization
     * @return description string
     */
    public String getDescription(Locale locale);
}

/**
 * BigTIFF format reading service provider (for files >4GB)
 */
class BigTIFFImageReaderSpi extends ImageReaderSpi {
    public BigTIFFImageReaderSpi();
    
    /**
     * Test if the input source contains BigTIFF format data
     * @param source input source
     * @return true if source contains BigTIFF data
     */
    public boolean canDecodeInput(Object source);
    
    /**
     * Create a new TIFFImageReader instance for BigTIFF
     * @param extension optional extension object
     * @return new TIFFImageReader instance
     */
    public ImageReader createReaderInstance(Object extension);
    
    /**
     * Get human-readable description of the provider
     * @param locale locale for localization
     * @return description string
     */
    public String getDescription(Locale locale);
}

/**
 * BigTIFF format writing service provider
 */
class BigTIFFImageWriterSpi extends ImageWriterSpi {
    public BigTIFFImageWriterSpi();
    
    /**
     * Test if the image type can be encoded to BigTIFF
     * @param type image type specifier
     * @return true if type can be encoded
     */
    public boolean canEncodeImage(ImageTypeSpecifier type);
    
    /**
     * Create a new TIFFImageWriter instance for BigTIFF
     * @param extension optional extension object
     * @return new TIFFImageWriter instance
     */
    public ImageWriter createWriterInstance(Object extension);
    
    /**
     * Get human-readable description of the provider
     * @param locale locale for localization
     * @return description string
     */
    public String getDescription(Locale locale);
}

Supported Image Formats

The plugin supports a comprehensive range of TIFF image types and formats:

  • Bi-level: 1-bit black and white images
  • Grayscale: 1-16 bits per pixel grayscale images
  • Palette: Color-mapped images with up to 256 colors
  • RGB: 8-16 bits per component RGB images
  • RGBA: RGB with alpha channel support
  • CMYK: 8-16 bits per component CMYK images
  • YCbCr: YUV color space images
  • CIE Lab: CIE Lab color space images

Advanced Features

  • Multi-page documents: Support for multiple images in a single TIFF file
  • Tiled images: Efficient access to large images through tiling
  • BigTIFF support: Files larger than 4GB with 64-bit addressing
  • ICC color profiles: Embedded color management support
  • Extensive metadata: TIFF tags, EXIF, IPTC, and XMP metadata preservation
  • Alpha channels: Full transparency support
  • Planar configuration: Support for both interleaved and planar color arrangements

Install with Tessl CLI

npx tessl i tessl/maven-com-twelvemonkeys-imageio--imageio-tiff

docs

compression.md

image-operations.md

index.md

metadata.md

tile.json