8

私は5つの単一ページのtiff画像を持っています。これら5つのtiff画像すべてを1つのマルチページtiff画像に結合したいと思います。Java AdvancedImagingAPIを使用しています。SUNが提供するJAIAPIのドキュメントとチュートリアルを読みました。JAIは初めてです。私は基本的なコアJavaを知っています。私はそれらのドキュメンテーションとSUNによるturorialを理解していません。だから友達5つのtiff画像ファイルを1つの複数ページのtiff画像に結合する方法を教えてください。上記のトピックに関するガイダンスを教えてください。私は上記のトピックをインターネットで検索していますが、手がかりは1つもありません。

4

1 に答える 1

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(); 
于 2010-07-02T13:40:55.113 に答える