複数ページのTIFFと圧縮に関するいくつかの質問がありましたが、2つをリンクするものはありませんでした。 This questionは、私が見た限りではありませんし、私を信じられないほど近くに置くので、私は願っています。私はオラクルのフォーラム・スレッドに言及しました(これはTIFFへの複数ページのPDFの圧縮についての話です)、私はこれを行うためにコードを完成させることをやめました。誰も助けることができますか? try/catchを削除して、これを短くしようとします(基本的にはコンソールでメッセージを出力してfalseを返します)。複数ページのTiff圧縮
public static boolean CompressedTiff(List<BufferedImage> images, File path)
{
if (!path.getParentFile().exists())
path.getParentFile().mkdirs();
path.createNewFile();
ImageOutputStream ios;
ios = ImageIO.createImageOutputStream(path);
Iterator<ImageWriter> imageWriters = ImageIO.getImageWritersByFormatName("TIFF");
ImageWriter writer = (ImageWriter)imageWriters.next();
writer.setOutput(ios);
TIFFImageWriteParam writeParam = (TIFFImageWriteParam)writer.getDefaultWriteParam();
writeParam.setCompressionMode(2);
writeParam.setCompressionType("LZW");
writer.prepareWriteSequence(null);
for(int i = 0; i < images.size(); i++)
{
ImageTypeSpecifier spec = ImageTypeSpecifier.createFromRenderedImage(images.get(i));
javax.imageio.metadata.IIOMetadata metadata = writer.getDefaultImageMetadata(spec, writeParam);
IIOImage iioImage = new IIOImage(images.get(i), null, metadata);
writer.writeToSequence(iioImage, writeParam);
images.get(i).flush();//modified after release.
images.get(i).flush();
writer.endWriteSequence();
ios.flush();
writer.dispose();
ios.close();
}
return true;
}
それは私がprepareWriteSequenceを呼び出すために必要な言っwriter.writeToSequenceで次のパスに出て失敗しました。私は
のwriter.prepareWriteSequence(metadata);
writer.writeToSequence(iioImage, writeParam);
も以前のwriter.prepareWriteSequence(null)を削除しました。
ファイルを正しくナビゲートしているように見えますが、出力にはレンダリング可能なtifの種類はありません。複数ページまたはそれ以外。
私はJAIをインストールしていますので、圧縮されたイメージを実現するために何らかの方法で使用することができれば素晴らしいと思います。私がTIFFを生成するために使用しているコードはこれを使用していますが、ページに圧縮を追加するまでは何も見ていません。
編集:ios.flush()の束を追加しました。 ios.close();キャッチブロック内で呼び出し、レンダリング不能なTIFFの問題を防止します。しかし、最初のページを超えてページを追加しているわけではありません。
私は、圧縮アスペクトが動作していると言いたいのですが(50%のファイルサイズが残っているところ)、このように複数ページを試したことはありません(通常JAIを使用します。上記の方法でJAIとの調整を試みると、ファイルサイズの圧縮はなくなります)。それを読んだら、JAIは開発時の特許によってLZWをサポートしていないようだ。 – Robert