/** * Merges multiple images into one TIFF image. * * @param inputImages an array of image files * @param outputTiff the output TIFF file * @throws Exception */ public static void mergeTiff(File[] inputImages, File outputTiff) throws IOException { List<IIOImage> imageList = new ArrayList<IIOImage>(); for (int i = 0; i < inputImages.length; i++) { imageList.addAll(getIIOImageList(inputImages[i])); } if (imageList.isEmpty()) { // if no image return; } Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(TIFF_FORMAT); ImageWriter writer = writers.next(); // Set up the writeParam TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.US); tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED); // Get the stream metadata IIOMetadata streamMetadata = writer.getDefaultStreamMetadata(tiffWriteParam); ImageOutputStream ios = ImageIO.createImageOutputStream(outputTiff); writer.setOutput(ios); IIOImage firstIioImage = imageList.remove(0); writer.write(streamMetadata, firstIioImage, tiffWriteParam); int i = 1; for (IIOImage iioImage : imageList) { writer.writeInsert(i++, iioImage, tiffWriteParam); } ios.close(); writer.dispose(); }