Share this page 

Convert many single-page TIF into one multi-page TIF Tag(s): AWT


This HowTo takes a list of single-page TIF and convert them into one multi-page TIF.

This is done with the JAI (Java Advance Image) package.

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.awt.image.BufferedImage;
import javax.media.jai.NullOpImage;
import javax.media.jai.OpImage;
import javax.media.jai.PlanarImage;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.SeekableStream;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.TIFFEncodeParam;

public class TiffUtils {

  public static void main(String[] args) throws Exception {
    // 2 single page TIF to be in a multipage
    String [] tifs = {
        "C:/temp/test01.tif",
        "C:/temp/test02.tif"
    };
    int numTifs = tifs.length;  // 2 pages

    BufferedImage image[] = new BufferedImage[numTifs];
    for (int i = 0; i < numTifs; i++) {
        SeekableStream ss = new FileSeekableStream(tifs[i]);
        ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", ss, null);
        PlanarImage pi = new NullOpImage
            (decoder.decodeAsRenderedImage(0),null,null,OpImage.OP_IO_BOUND);
        image[i] = pi.getAsBufferedImage();
        ss.close();
    }
    TIFFEncodeParam params = new TIFFEncodeParam();
    params.setCompression(TIFFEncodeParam.COMPRESSION_DEFLATE);
    OutputStream out = new FileOutputStream("C:/temp/multipage.tif");
    ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out, params);
    List <BufferedImage>list = new ArrayList<BufferedImage>(image.length);
    for (int i = 1; i < image.length; i++) {
        list.add(image[i]);
    }
    params.setExtraImages(list.iterator());
    encoder.encode(image[0]);
    out.close();
    System.out.println("Done.");
  }
}

See also : Convert a multi-page TIF into single-page TIF


mail_outline
Send comment, question or suggestion to howto@rgagnon.com