2010-07-02 37 views
6

Mam 5 pojedynczych stron obrazy tiff. Chcę połączyć wszystkie te 5 obrazów tiff w jeden wielotonowy obraz tiff. Używam Java Advanced Imaging API. Przeczytałem dokumentację interfejsu API JAI oraz samouczki wydane przez SUN. Jestem nowy w JAI. Znam podstawowy rdzeń java. Nie rozumiem tej dokumentacji i turortu przez SUN. Więc przyjaciele Powiedz mi, jak połączyć 5 plików obrazu w jeden wielostronicowy obraz tiff. Proszę, daj mi jakąś wskazówkę na powyższy temat. Szukałem Internetu na powyższy temat, ale nie otrzymałem żadnej wskazówki. Proszę więc, zaproś mnie do przyjaciół.Jak łączyć dwa lub wiele plików obrazów tiff w jeden obraz wielopiszowy TIF w JAVA

Z góry dziękuję.

+0

Korzystając z tej biblioteki obrazów Java - https://github.com/dragon66/icafe, możesz łatwo połączyć ze sobą dwie lub dowolną liczbę obrazów TIFF. Dodatkowo nie musisz dekodować obrazów, możesz nawet scalać wielostronicowe TIFF-y. – dragon66

Odpowiedz

10

Mam nadzieję, że masz pamięć komputera, aby to zrobić. Pliki obrazów TIFF są duże.

Masz rację, ponieważ do tego celu musisz użyć interfejsu API Java Advanced Imaging (JAI).

Najpierw należy przekonwertować obrazy TIFF na java.awt.image.BufferedImage. Oto kod, który prawdopodobnie zadziała. Nie testowałem tego kodu.

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

Następnie należy przekonwertować tablicę BufferedImage na wiele obrazów TIFF. Nie testowałem też tego kodu.

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

Powodzenia.

+0

Dziękuję Sir! w celu uzyskania odpowiedzi. Będę wyzywająco wypróbować twoją logikę. Dziękuję bardzo! –

+0

Nie ma za co. –

+0

Dziękuję Sir! za odpowiedź i rozwiązanie. Zaimplementowałem Twoje rozwiązanie i działa idealnie. Z pewnymi zmianami działa zgodnie z moimi wymaganiami. Dziękuję Ci bardzo! –

Powiązane problemy