2010-07-02 60 views
6

Tengo 5 imágenes Tiff de una sola página. Quiero combinar todas estas 5 imágenes de tiff en una imagen de tiff multipágina. Estoy usando Java Advanced Imaging API. He leído la documentación de la API de JAI y los tutoriales proporcionados por SUN. Soy nuevo en JAI. Conozco el núcleo básico de Java. No entiendo esa documentación y turorial de SUN. So friends Por favor, dígame cómo combinar 5 archivos de imágenes tiff en una imagen tiff multipágina. Por favor, dame alguna guía sobre el tema anterior. He estado buscando en Internet el tema anterior pero no obtengo ninguna pista. Así que por favor, guíame amigos.Cómo combinar dos o más archivos de imágenes tiff en una imagen Tiff multipágina en JAVA

Gracias de antemano.

+0

Usando esta biblioteca de imágenes Java - https://github.com/dragon66/icafe, puede unir fácilmente dos o cualquier número de imágenes TIFF. Además, NO es necesario decodificar las imágenes e incluso puede fusionar archivos TIFF multipágina. – dragon66

Respuesta

10

Espero que tenga la memoria de la computadora para hacer esto. Los archivos de imagen TIFF son grandes.

Tiene razón en que necesita usar la Java Advanced Imaging (JAI) API para hacer esto.

En primer lugar, debe convertir las imágenes TIFF a java.awt.image.BufferedImage. Aquí hay un código que probablemente funcione. No he probado este código.

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(); 
} 

A continuación, convierte la matriz BufferedImage de nuevo en una imagen TIFF múltiple. No he probado este código tampoco.

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(); 

Buena suerte.

+0

¡Gracias, señor! para su respuesta. Definitivamente voy a probar tu lógica. ¡Muchas gracias! –

+0

De nada. –

+0

¡Gracias, señor! por su respuesta y solución. He implementado su solución y funciona perfecto. Con algunos cambios funciona según mi requerimiento. ¡Muchas gracias! –

Cuestiones relacionadas