Splitting a multipage TIFF image into individual images (Java)

aioobe picture aioobe · Jul 21, 2013 · Viewed 25.3k times · Source

Been tearing my hair on this one.

How do I split a multipage / multilayer TIFF image into several individual images?

Demo image available here.

(Would prefer a pure Java (i.e. non-native) solution. Doesn't matter if the solution relies on commercial libraries.)

Answer

Thire picture Thire · Sep 11, 2013

You can use the Java Advanced Imaging library, JAI, to split a mutlipage TIFF, by using an ImageReader:

ImageInputStream is = ImageIO.createImageInputStream(new File(pathToImage));
if (is == null || is.length() == 0){
  // handle error
}
Iterator<ImageReader> iterator = ImageIO.getImageReaders(is);
if (iterator == null || !iterator.hasNext()) {
  throw new IOException("Image file format not supported by ImageIO: " + pathToImage);
}
// We are just looking for the first reader compatible:
ImageReader reader = (ImageReader) iterator.next();
iterator = null;
reader.setInput(is);

Then you can get the number of pages:

nbPages = reader.getNumImages(true);

and read pages separatly:

reader.read(numPage)