如何在JAVA中将两个或多个tiff图像文件合并为一个多页tiff图像

如何在JAVA中将两个或多个tiff图像文件合并为一个多页tiff图像

问题描述:

我有5个单页tiff图像。 我想将所有这5个tiff图像合并为一个多页tiff图像。 我正在使用Java Advanced Imaging API。 我已阅读SUN给出的JAI API文档和教程。 我是JAI的新手。我知道基本的核心Java。 我不理解SUN的那些文档和内容。 所以,朋友请告诉我如何将5个tiff图像文件合并为一个多页tiff图像。 请给我一些关于上述话题的指导。 我一直在寻找上述主题的互联网,但没有得到任何单一的线索。 所以请引导我的朋友。如何在JAVA中将两个或多个tiff图像文件合并为一个多页tiff图像

在此先感谢。

+0

使用此Java图像库 - https://github.com/dragon66/icafe,您可以轻松地将两个或任意数量的TIFF图像合并在一起。另外你不需要解码图像,你甚至可以合并多页TIFF。 – dragon66 2014-10-09 16:22:12

我希望你有计算机内存来做到这一点。 TIFF图像文件很大。

你是对的,你需要使用Java Advanced Imaging (JAI) API来做到这一点。

首先,您必须将TIFF图像转换为java.awt.image.BufferedImage。这里有一些代码可能会起作用。我没有测试过这个代码。

BufferedImage image[] = new BufferedImage[numImages]; 
for (int i = 0; i < numImages; i++) { 
    SeekableStream ss = new FileSeekableStream(input_dir + 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(); 
} 

然后,您将BufferedImage数组转换回多个TIFF图像。我还没有测试过这个代码。

TIFFEncodeParam params = new TIFFEncodeParam(); 
OutputStream out = new FileOutputStream(output_dir + image_name + ".tif"); 
ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out, params); 
Vector vector = new Vector(); 
for (int i = 0; i < numImages; i++) { 
    vector.add(image[i]); 
} 
params.setExtraImages(vector.listIterator(1)); // this may need a check to avoid IndexOutOfBoundsException when vector is empty 
encoder.encode(image[0]); 
out.close(); 

祝你好运。

+0

谢谢,先生! 为您的答复。我会挑战你的逻辑。 非常感谢! – 2010-07-02 15:01:20

+0

不客气。 – 2010-07-02 15:16:45

+0

谢谢先生!为您的答复和解决方案。我已经实现了你的解决方案,它的工作原理非常完美根据我的要求进行一些更改。非常感谢你! – 2010-07-05 10:18:37