私は、複数ページの tiff イメージを単一の jpeg ファイルに分割し、複数の jpeg を単一の複数ページの tiff ファイルに再マージしようとしているプログラムで数日間作業しています。主に JAI、ImageIO、およびカスタム JAI/ImageIO ライブラリの使用を含む多くのアプローチを試しましたが、3 つの単一の jpeg ファイルを単一の TIFF ファイルにマージすることはできません。たとえば、次のコード セクションがあります。
private void pushTIFF(ArrayList<PlanarImage> images) throws IOException{
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");
ImageWriter imageWriter = writers.next();
ImageOutputStream pushOS = ImageIO.createImageOutputStream(new File(pathToTIFF));
imageWriter.setOutput(pushOS);
imageWriter.prepareWriteSequence(null);
for(int i = 0; i < images.size(); i ++){
imageWriter.writeToSequence(new IIOImage(images.get(i),null,null),null);
}
imageWriter.endWriteSequence();
imageWriter.dispose();
pushOS.flush();
pushOS.close();
}
ArrayList 画像リストは、次を使用してソースのマルチページ tiff 画像をデコードすることにより、別の場所で取得されます。
ImageCodec.createImageDecoder("tiff", tiffStream, null)
代わりに ImageIO ライブラリを使用して他のアプローチも試しましたが、この問題に適切にアプローチする方法について頭を悩ませているようには見えません。上記のメソッド「pushTiff」を実行すると、次のような例外が常に発生するようです。
com.sun.media.jai.codecimpl.util.ImagingException: Unable to decode Packbits compressed data - not enough data.
前に取得した 3 つのページが null か何かであるかのように、実行時にそれらが存在することを確認すると、それらは存在します。
基本的に、Javaでtiffファイルを操作する最新の方法を誰かが知っているかどうかを尋ねています。最後に、大きな tiff 画像を小さな jpeg ページに分割してから、最初よりも全体的なファイルサイズが小さい tiff 画像に再マージできるようにしたいと考えています。
何か案は?