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

metadata.mddocs/

Metadata Management

Complete TIFF metadata handling including image-level and stream-level metadata with support for standard TIFF tags, EXIF, IPTC, and XMP metadata preservation and manipulation.

Capabilities

TIFF Image Metadata

Container for TIFF image-level metadata including all TIFF tags, EXIF data, and custom metadata fields.

/**
 * TIFF image-level metadata container with standard format support
 */
class TIFFImageMetadata extends IIOMetadata {
    
    /** Scale factor used for rational values in metadata */
    public static final int RATIONAL_SCALE_FACTOR = 100000;
    
    /**
     * Create empty metadata instance
     */
    public TIFFImageMetadata();
    
    /**
     * Create metadata from TIFF Image File Directory (IFD)
     * @param ifd Directory containing TIFF tags and values
     */
    public TIFFImageMetadata(Directory ifd);
    
    /**
     * Create metadata from collection of entries
     * @param entries Collection of metadata entries
     */
    public TIFFImageMetadata(Collection<? extends Entry> entries);
    
    /**
     * Check if metadata is read-only
     * @return true if metadata cannot be modified
     */
    public boolean isReadOnly();
    
    /**
     * Set metadata from XML DOM tree
     * @param formatName metadata format name
     * @param root root node of DOM tree
     */
    public void setFromTree(String formatName, Node root);
    
    /**
     * Merge metadata from XML DOM tree
     * @param formatName metadata format name  
     * @param root root node of DOM tree to merge
     */
    public void mergeTree(String formatName, Node root);
    
    /**
     * Reset metadata to original state
     */
    public void reset();
    
    /**
     * Get TIFF field by tag number
     * @param tagNumber TIFF tag number (e.g., 256 for ImageWidth)
     * @return Object containing tag value, or null if not present
     */
    public Object getTIFFField(int tagNumber);
}

Usage Examples:

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import com.twelvemonkeys.imageio.plugins.tiff.TIFFImageMetadata;
import java.io.File;

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

TIFFImageMetadata metadata = (TIFFImageMetadata) reader.getImageMetadata(0);

// Get specific TIFF tags
Integer width = (Integer) metadata.getTIFFField(256);      // ImageWidth
Integer height = (Integer) metadata.getTIFFField(257);     // ImageLength  
Integer compression = (Integer) metadata.getTIFFField(259); // Compression
String software = (String) metadata.getTIFFField(305);     // Software

System.out.println("Image: " + width + "x" + height);
System.out.println("Compression: " + compression);
System.out.println("Created with: " + software);

// Get metadata as XML tree
Node tree = metadata.getAsTree(TIFFImageMetadataFormat.SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME);

reader.dispose();

// Creating custom metadata for writing
TIFFImageMetadata customMetadata = new TIFFImageMetadata();

// Set metadata values (using XML tree manipulation)
IIOMetadataNode root = new IIOMetadataNode(TIFFImageMetadataFormat.SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME);
IIOMetadataNode softwareNode = new IIOMetadataNode("Software");
softwareNode.setAttribute("value", "My Application v1.0");
root.appendChild(softwareNode);

customMetadata.setFromTree(TIFFImageMetadataFormat.SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME, root);

TIFF Stream Metadata

Container for TIFF stream-level metadata, primarily managing byte order configuration and global file properties.

/**
 * TIFF stream-level metadata (byte order configuration)
 */
class TIFFStreamMetadata extends IIOMetadata {
    
    /** Standard stream metadata format name */
    public static final String SUN_NATIVE_STREAM_METADATA_FORMAT_NAME = 
        "com_sun_media_imageio_plugins_tiff_stream_1.0";
    
    /**
     * Create stream metadata with default big-endian byte order
     */
    public TIFFStreamMetadata();
    
    /**
     * Check if metadata is read-only (always returns false)
     * @return false - stream metadata is writable
     */
    public boolean isReadOnly();
    
    /**
     * Get metadata as XML DOM tree
     * @param formatName metadata format name
     * @return Node representing the metadata tree
     */
    public Node getAsTree(String formatName);
    
    /**
     * Merge metadata from XML DOM tree
     * @param formatName metadata format name
     * @param root root node of tree to merge
     */
    public void mergeTree(String formatName, Node root);
    
    /**
     * Reset metadata to default state
     */
    public void reset();
    
    /**
     * Configure stream byte order based on metadata and output stream
     * @param streamMetadata stream metadata containing byte order information
     * @param imageOutput target image output stream
     */
    public static void configureStreamByteOrder(IIOMetadata streamMetadata, ImageOutputStream imageOutput);
}

Usage Examples:

import javax.imageio.ImageWriter;
import com.twelvemonkeys.imageio.plugins.tiff.TIFFStreamMetadata;

// Creating stream metadata for writing
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIFF").next();
TIFFStreamMetadata streamMetadata = (TIFFStreamMetadata) writer.getDefaultStreamMetadata(null);

// Get stream metadata as XML tree
Node streamTree = streamMetadata.getAsTree(TIFFStreamMetadata.SUN_NATIVE_STREAM_METADATA_FORMAT_NAME);

// Use stream metadata when writing
writer.write(streamMetadata, new IIOImage(image, null, imageMetadata), writeParam);

Metadata Format Descriptors

Format descriptors define the structure and validation rules for TIFF metadata in XML format.

/**
 * Metadata format descriptor for TIFF image metadata
 */
class TIFFImageMetadataFormat extends IIOMetadataFormatImpl {
    
    /** Standard image metadata format name */
    public static final String SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME = 
        "com_sun_media_imageio_plugins_tiff_image_1.0";
    
    /**
     * Constructor for metadata format
     */
    public TIFFImageMetadataFormat();
    
    /**
     * Check if a node can appear for the specified image type
     * @param elementName name of the XML element
     * @param imageType image type specifier
     * @return true if node is valid for the image type
     */
    public boolean canNodeAppear(String elementName, ImageTypeSpecifier imageType);
    
    /**
     * Get singleton instance of the format descriptor
     * @return singleton TIFFImageMetadataFormat instance
     */
    public static TIFFImageMetadataFormat getInstance();
}

/**
 * Metadata format descriptor for TIFF stream metadata
 */
class TIFFStreamMetadataFormat extends IIOMetadataFormatImpl {
    
    /** Standard stream metadata format name */
    public static final String SUN_NATIVE_STREAM_METADATA_FORMAT_NAME = 
        "com_sun_media_imageio_plugins_tiff_stream_1.0";
    
    /**
     * Get singleton instance of the format descriptor
     * @return singleton TIFFStreamMetadataFormat instance
     */
    public static TIFFStreamMetadataFormat getInstance();
}

/**
 * Alternative metadata format for compatibility
 */
class TIFFMedataFormat extends IIOMetadataFormatImpl {
    
    /** References the image metadata format name */
    public static final String SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME = 
        TIFFImageMetadataFormat.SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME;
    
    /**
     * Get singleton instance of the format descriptor
     * @return singleton TIFFMedataFormat instance
     */
    public static TIFFMedataFormat getInstance();
}

Common TIFF Tags

The plugin supports reading and writing all standard TIFF tags. Here are the most commonly used ones:

Basic Image Information

  • 256 (ImageWidth): Image width in pixels
  • 257 (ImageLength): Image height in pixels
  • 258 (BitsPerSample): Number of bits per color component
  • 259 (Compression): Compression scheme used
  • 262 (PhotometricInterpretation): Color space interpretation
  • 273 (StripOffsets): Byte offsets of image data strips
  • 277 (SamplesPerPixel): Number of color components
  • 278 (RowsPerStrip): Number of rows per strip

Color and Display

  • 320 (ColorMap): Color palette for palette images
  • 338 (ExtraSamples): Description of extra samples (alpha channel)
  • 529 (YCbCrCoefficients): YCbCr color space coefficients
  • 530 (YCbCrSubSampling): YCbCr subsampling factors

Metadata and Documentation

  • 270 (ImageDescription): Image description or caption
  • 271 (Make): Camera/scanner manufacturer
  • 272 (Model): Camera/scanner model
  • 305 (Software): Software used to create the image
  • 306 (DateTime): Creation date and time
  • 315 (Artist): Person who created the image
  • 33432 (Copyright): Copyright notice

Resolution and Physical Properties

  • 282 (XResolution): Horizontal resolution
  • 283 (YResolution): Vertical resolution
  • 296 (ResolutionUnit): Resolution units (inches, centimeters)

Advanced Features

  • 322 (TileWidth): Tile width for tiled images
  • 323 (TileLength): Tile height for tiled images
  • 324 (TileOffsets): Byte offsets of tile data
  • 325 (TileByteCounts): Byte counts for each tile

Metadata Preservation

// Reading image with metadata preservation
ImageReader reader = ImageIO.getImageReadersByFormatName("TIFF").next();
reader.setInput(ImageIO.createImageInputStream(new File("input.tiff")));

BufferedImage image = reader.read(0);
TIFFImageMetadata originalMetadata = (TIFFImageMetadata) reader.getImageMetadata(0);
reader.dispose();

// Writing image with preserved metadata
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIFF").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("output.tiff")));

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

Extended Metadata Support

The plugin automatically handles various embedded metadata formats:

  • EXIF: Camera settings and shooting information
  • IPTC: International Press Telecommunications Council metadata
  • XMP: Extensible Metadata Platform (Adobe) metadata
  • ICC Profiles: Color management profiles
  • Custom Tags: Application-specific metadata tags

These are automatically preserved during read/write operations and can be accessed through the standard TIFF tag interface or specialized metadata parsers.

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