package com.github.jaiimageio; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.util.Iterator; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.ImageWriter; import javax.imageio.metadata.IIOMetadata; import javax.imageio.stream.ImageOutputStream; import com.github.jaiimageio.impl.plugins.tiff.TIFFImageReader; import com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriter; import com.github.jaiimageio.impl.plugins.tiff.TIFFT6Compressor; import com.github.jaiimageio.plugins.tiff.TIFFImageReadParam; import com.github.jaiimageio.plugins.tiff.TIFFImageWriteParam; import org.junit.Test; import static org.junit.Assert.assertTrue; public class TiffTest { @Test public void testReadTiff() throws Exception { URL g4File = getClass().getResource("/checkerg4.tiff"); BufferedImage bufferedImage = ImageIO.read(g4File); } @Test public void testWriteG4Tiff() throws Exception { BufferedImage image = new BufferedImage(256, 256, BufferedImage.TYPE_BYTE_BINARY); final int black = 0; final int white = 0xFFFFFF; for( int row = 0 ; row < 256 ; row ++ ) { for( int col= 0 ; col< 256 ; col++ ) { image.setRGB(col, row, (((row+col)&1)==0) ?white:black); } } Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("tiff"); assertTrue(writers.hasNext()); TIFFImageWriter tiffImageWriter = (TIFFImageWriter)writers.next(); //---- TIFFImageWriteParam writeParams = (TIFFImageWriteParam)tiffImageWriter.getDefaultWriteParam(); TIFFT6Compressor compressor = new TIFFT6Compressor(); writeParams.setCompressionMode(TIFFImageWriteParam.MODE_EXPLICIT); writeParams.setCompressionType(compressor.getCompressionType()); writeParams.setTIFFCompressor(compressor); //-- File f = File.createTempFile("imageio-test", ".tiff"); ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(new FileOutputStream(f)); tiffImageWriter.setOutput(imageOutputStream); //-- tiffImageWriter.write(null, new IIOImage(image, null, null), writeParams); tiffImageWriter.dispose(); imageOutputStream.close(); ImageIO.read(f); } @Test public void testG4Compressor() throws Exception { TIFFT6Compressor compressor = new TIFFT6Compressor(); byte [] input = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 }; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos); compressor.setStream(imageOutputStream); compressor.encode(input, 0, 72, 1, new int [] {1}, 9) ; } @Test public void testG4Compressor1() throws Exception { TIFFT6Compressor compressor = new TIFFT6Compressor(); byte [] input = { 0x55 }; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos); compressor.setStream(imageOutputStream); compressor.encode(input, 0, 1, 1, new int [] {1}, 1) ; } @Test public void testG4Compressor2() throws Exception { byte [] input = { (byte)0x55, (byte)0x55, (byte)0x55, (byte)0xAA, (byte)0xAA, (byte)0xAA, (byte)0x55, (byte)0x55, (byte)0x55, }; for( int row = 0 ; row < 3 ; row ++ ) { for( int col = 0 ; col < 24 ; col ++ ) { TIFFT6Compressor compressor = new TIFFT6Compressor(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos); compressor.setStream(imageOutputStream); compressor.encode(input, 0, col, row, new int [] {1}, 3) ; } } } @Test public void testG4Compressor3() throws Exception { byte [] input = { (byte)0xFF, (byte)0x00, (byte)0x55, }; for( int row = 0 ; row < 3 ; row ++ ) { for( int col = 0 ; col < 8 ; col ++ ) { TIFFT6Compressor compressor = new TIFFT6Compressor(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos); compressor.setStream(imageOutputStream); compressor.encode(input, 0, col, row, new int [] {1}, 1) ; } } } }