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

compression.mddocs/

Compression Configuration

Advanced compression settings and write parameters for optimizing TIFF output with support for 9 different compression algorithms including both lossless and lossy options.

Capabilities

TIFF Write Parameters

Configuration class for controlling TIFF compression, quality settings, and write behavior.

/**
 * Configuration for TIFF writing operations with compression support
 */
class TIFFImageWriteParam extends ImageWriteParam {
    
    // Available compression types (accessed via getCompressionTypes())
    // String constants for setCompressionType() method:
    
    // "None" - No compression (default) - fastest writing, largest files
    // "CCITT RLE" - CCITT Modified Huffman RLE - for bi-level (black & white) images  
    // "CCITT T.4" - CCITT Group 3 Fax compression - for bi-level images
    // "CCITT T.6" - CCITT Group 4 Fax compression - for bi-level images
    // "LZW" - Lempel-Ziv-Welch lossless compression - good general purpose
    // "JPEG" - JPEG compression - lossy, best for photographs
    // "ZLib" - Adobe-style Deflate compression - lossless
    // "PackBits" - PackBits compression - simple lossless compression
    // "Deflate" - PKZIP-style Deflate compression - lossless
    
    /**
     * Constructor creates write parameters with default settings
     */
    public TIFFImageWriteParam();
    
    /**
     * Get available compression quality values for current compression type
     * @return array of quality values (typically 0.0 to 1.0)
     */
    public float[] getCompressionQualityValues();
    
    /**
     * Get human-readable descriptions for compression quality values
     * @return array of quality descriptions
     */
    public String[] getCompressionQualityDescriptions();
}

Usage Examples:

import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
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 with LZW compression (lossless, good compression ratio)
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIFF").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("lzw_compressed.tiff")));

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

BufferedImage image = // ... load or create image
writer.write(null, new IIOImage(image, null, null), writeParam);
writer.dispose();

// Writing with JPEG compression (lossy, smallest files for photos)
writer = ImageIO.getImageWritersByFormatName("TIFF").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("jpeg_compressed.tiff")));

writeParam = (TIFFImageWriteParam) writer.getDefaultWriteParam();
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType("JPEG");
writeParam.setCompressionQuality(0.8f); // 80% quality

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

// Writing black & white image with CCITT Group 4 compression
BufferedImage bwImage = // ... black and white image
writer = ImageIO.getImageWritersByFormatName("TIFF").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("fax_compressed.tiff")));

writeParam = (TIFFImageWriteParam) writer.getDefaultWriteParam();
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType("CCITT T.6");

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

Compression Types and Use Cases

Each compression algorithm is optimized for specific types of images and use cases:

None (Uncompressed)

  • Best for: When write speed is critical and file size is not a concern
  • Compression ratio: 1:1 (no compression)
  • Quality: Lossless
  • Supported images: All image types

CCITT RLE (Modified Huffman)

  • Best for: Bi-level (black & white) images with moderate complexity
  • Compression ratio: 2:1 to 10:1 depending on image content
  • Quality: Lossless
  • Supported images: Bi-level only

CCITT T.4 (Group 3 Fax)

  • Best for: Bi-level images like scanned documents and fax transmissions
  • Compression ratio: 5:1 to 20:1 for typical documents
  • Quality: Lossless
  • Supported images: Bi-level only

CCITT T.6 (Group 4 Fax)

  • Best for: Bi-level images with the best compression for documents
  • Compression ratio: 10:1 to 50:1 for typical documents
  • Quality: Lossless
  • Supported images: Bi-level only

LZW (Lempel-Ziv-Welch)

  • Best for: General purpose lossless compression for all image types
  • Compression ratio: 1.5:1 to 3:1 depending on image content
  • Quality: Lossless
  • Supported images: All image types

JPEG

  • Best for: Photographic images where some quality loss is acceptable
  • Compression ratio: 5:1 to 100:1 depending on quality setting
  • Quality: Lossy (configurable quality 0.0 to 1.0)
  • Supported images: Grayscale and RGB images

ZLib (Adobe Deflate)

  • Best for: Lossless compression with good compression ratios
  • Compression ratio: 1.5:1 to 4:1 depending on image content
  • Quality: Lossless
  • Supported images: All image types

PackBits

  • Best for: Simple lossless compression with fast encoding/decoding
  • Compression ratio: 1.1:1 to 2:1 depending on image content
  • Quality: Lossless
  • Supported images: All image types

Deflate (PKZIP-style)

  • Best for: Lossless compression compatible with ZIP/PNG deflate
  • Compression ratio: 1.5:1 to 4:1 depending on image content
  • Quality: Lossless
  • Supported images: All image types

Quality Settings

For lossy compression (JPEG), quality can be controlled using compression quality parameters:

// Set JPEG compression with specific quality
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType("JPEG");
writeParam.setCompressionQuality(0.9f); // 90% quality (higher = better quality, larger file)

// Get available quality values and descriptions
float[] qualityValues = writeParam.getCompressionQualityValues();
String[] qualityDescriptions = writeParam.getCompressionQualityDescriptions();

for (int i = 0; i < qualityValues.length; i++) {
    System.out.println("Quality " + qualityValues[i] + ": " + qualityDescriptions[i]);
}

Best Practices

For Document Scanning:

  • Use CCITT T.6 for black & white documents (best compression)
  • Use LZW for color/grayscale documents (good compression, lossless)

For Photography:

  • Use JPEG with quality 0.8-0.95 for web/display use
  • Use LZW or no compression for archival/editing purposes

For Scientific/Medical Images:

  • Always use lossless compression (LZW, Deflate, or None)
  • Preserve all bit depth and color information

For Large Images:

  • Consider BigTIFF format for files >4GB
  • Use tiling for efficient partial image access
  • Use LZW or Deflate for good compression without quality loss

Performance Considerations:

  • None: Fastest write, largest files
  • PackBits: Fast compression, moderate compression ratio
  • LZW/Deflate: Moderate speed, good compression
  • JPEG: Fast compression, smallest files (lossy)
  • CCITT: Fastest for bi-level, excellent compression

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