我正在尝试获取多个多页 .tif 文件并将它们组合成一个多页 tif 文件。
我在这个问题中找到了一些代码,但它似乎只获取每个单独的 .tif 文件的第一页并使用这些第一页创建新的多页 .tif。
是否有一个我没有看到的小变化会导致相同的代码从源 .tif 文件中获取每一页并将它们全部放入组合的 .tif 中?
为了澄清,我想要源文件:
- SourceA.tif (3 页)
- SourceB.tif (4 页)
- SourceC.tif (1 页)
被组合成
- 组合.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);
}
}