ImageIO plugin for Aldus/Adobe Tagged Image File Format (TIFF)
—
Advanced compression settings and write parameters for optimizing TIFF output with support for 9 different compression algorithms including both lossless and lossy options.
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();Each compression algorithm is optimized for specific types of images and use cases:
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]);
}For Document Scanning:
For Photography:
For Scientific/Medical Images:
For Large Images:
Performance Considerations:
Install with Tessl CLI
npx tessl i tessl/maven-com-twelvemonkeys-imageio--imageio-tiff