複数のマルチページ.tifファイルを取得し、それらを1つのマルチページtifファイルに結合しようとしています。
この質問でいくつかのコードを見つけましたが、それは個々の.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);
}
}