import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import javax.media.jai.NullOpImage; import javax.media.jai.OpImage; import javax.media.jai.PlanarImage; import com.sun.media.jai.codec.ImageCodec; import com.sun.media.jai.codec.ImageDecoder; import com.sun.media.jai.codec.ImageEncoder; import com.sun.media.jai.codec.TIFFEncodeParam; public class MultipleTiff { public static void main(String[] args) { String[] files = { "test1.tif", "test2.tif", "test3.tif" }; MultipleTiff mt = new MultipleTiff(); mt.saveMultipleTiff(mt.loadImages("img/", files), "out/", "out.tif"); } private BufferedImage[] loadImages(String inputDir, String[] files) { BufferedImage images[] = new BufferedImage[files.length]; FileInputStream stream = null; PlanarImage pi; for (int i = 0; i < files.length; i++) { try { stream = new FileInputStream(inputDir + files[i]); ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", stream, null); pi = new NullOpImage( decoder.decodeAsRenderedImage(), null, null, OpImage.OP_IO_BOUND); images[i] = pi.getAsBufferedImage(); } catch (IOException e) { e.printStackTrace(); } finally { try { stream.close(); }catch(IOException ioe) { } } } return images; } private void saveMultipleTiff(BufferedImage[] images, String outputDir, String imageName) { TIFFEncodeParam params = new TIFFEncodeParam(); OutputStream out = null; try { out = new FileOutputStream(outputDir + imageName); ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out, params); ArrayList list = new ArrayList(); for (int i = 1; i < images.length; i++) { list.add(images[i]); } params.setExtraImages(list.iterator()); encoder.encode(images[0]); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try{ out.close(); } catch(IOException ioe){} } } }