Я пытаюсь взять несколько многостраничных файлов .tif и объединить их в один многостраничный файл tif.
Я нашел код в этом question, но кажется, что он берет только первую страницу каждого отдельного файла .tif и создает новый многостраничный .tif с этими первыми страницами.
Есть ли небольшое изменение, которое я не вижу, которое заставило бы этот же код захватить каждую страницу из исходных файлов .tif и поместить их все в объединенный .tif?
Чтобы уточнить, исходные файлы хотелось бы:
- SourceA.tif (3 страницы)
- SourceB.tif (4 страницы)
- SourceC.tif (1 страница)
быть объединенным в
- Combined.tif (8 страниц)
Я также хотел бы иметь возможность указать разрешение и сжатие .tif, но я не уверен, поддерживает ли JAI это, и это не является необходимостью для правильного ответа.
Код из указанного вопроса, измененный мной для загрузки всех файлов .tif в каталоге, приведен ниже для удобства ответа:
public static void main(String[] args) {
String inputDir = "C:\\tifSources";
File sourceDirectory = new File(inputDir);
File file[] = sourceDirectory.listFiles();
int numImages = file.length;
BufferedImage image[] = new BufferedImage[numImages];
try
{
for (int i = 0; i < numImages; i++)
{
SeekableStream ss = new FileSeekableStream(file[i]);
ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", ss, null);
PlanarImage op = new NullOpImage(decoder.decodeAsRenderedImage(0), null, null, OpImage.OP_IO_BOUND);
image[i] = op.getAsBufferedImage();
}
TIFFEncodeParam params = new TIFFEncodeParam();
OutputStream out = new FileOutputStream(inputDir + "\\combined.tif");
ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out, params);
List<BufferedImage> imageList = new ArrayList<BufferedImage>();
for (int i = 0; i < numImages; i++)
{
imageList.add(image[i]);
}
params.setExtraImages(imageList.iterator());
encoder.encode(image[0]);
out.close();
}
catch (Exception e)
{
System.out.println("Exception " + e);
}
}