Как объединить два или несколько файлов изображений TIFF в одно многостраничное изображение TIFF в JAVA - PullRequest
7 голосов
/ 02 июля 2010

У меня есть 5 одностраничных изображений.Я хочу объединить все эти 5 изображений TIFF в одно многостраничное изображение TIFF.Я использую Java Advanced Imaging API.Я прочитал документацию и руководства по JAI API, предоставленные SUN.Я новичок в JAI.Я знаю основное ядро ​​Java.Я не понимаю эту документацию и информацию от SUN.Итак, друзья Пожалуйста, скажите мне, как объединить 5 изображений в формате TIFF в одно изображение в формате TIFF.Пожалуйста, дайте мне некоторые указания по вышеуказанной теме.Я искал интернет по вышеуказанной теме, но не получил ни единой подсказки.Так что, пожалуйста, ведите меня, друзья.

Заранее спасибо.

1 Ответ

11 голосов
/ 02 июля 2010

Я надеюсь, у вас есть память компьютера для этого.Файлы изображений 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(); 

Удачи.

...