私は、たくさんの tiff を取り込んでそれらをまとめるプログラムを書いています。読み込んだほとんどの画像ファイルで機能するようになりましたが、それらを読み込もうとすると、大量の画像ファイルでエラーが発生します。
これが私が持っているコードのスニペットです:
int numPages = 0;
inStream = ImageIO.createImageInputStream(imageFile);
reader.setInput(inStream);
while(true){
bufferedImages.add(reader.readAll(numPages, reader.getDefaultReadParam()));
numPages++;
}
はい、範囲外の例外をキャッチするので、心配する必要はありません。私の問題は、次のエラーが発生することです。
javax.imageio.IIOException: イメージ メタデータの読み込み中に I/O エラーが発生しました! com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.readMetadata(TIFFImageReader.java:340) com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.seekToImage(TIFFImageReader.java:310) com.sun .media.imageioimpl.plugins.tiff.TIFFImageReader.prepareRead(TIFFImageReader.java:971) at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.read(TIFFImageReader.java:1153) at javax.imageio.ImageReader.readAll (ImageReader.java:1067) で sel.image.appender.ImageAppender.mergeImages(ImageAppender.java:59) で sel.imagenow.processor.AetnaLTCProcessor.processBatch(AetnaLTCProcessor.java:287) で sel.imagenow.processor.AetnaLTCProcessor. sel.processor.AbstractImageNowProcessor の processImpl(AetnaLTCProcessor.java:81)。
原因: com.sun.media.imageioimpl の javax.imageio.stream.ImageInputStreamImpl.readUnsignedShort(ImageInputStreamImpl.java:242) の javax.imageio.stream.ImageInputStreamImpl.readShort(ImageInputStreamImpl.java:229) での java.io.EOFException .plugins.tiff.TIFFIFD.initialize(TIFFIFD.java:194) at com.sun.media.imageioimpl.plugins.tiff.TIFFImageMetadata.initializeFromStream(TIFFImageMetadata.java:110) at com.sun.media.imageioimpl.plugins.tiff .TIFFImageReader.readMetadata(TIFFImageReader.java:336) ... 9 もっと見る
正しい JAI ライブラリを追加したことを確認しました。リーダーは「TIFF」タイプを使用しているため、リーダー (およびライター) は正しいのですが、何らかの理由でメタデータが間違っています。これで、これらすべての画像を Windows で通常どおり開いて表示できるようになったので、画像が実際に破損することはありません。Javaはそれらを正しく読みたくないだけです。私はストリーム metadata を使用して後でそれらを書き出すだけなので、メタデータについてはあまり気にしません。ファイルをリストに読み込んで追加できるようにするだけです。ライターで writer.replaceImageMetaData メソッドを見つけましたが、IOWriter の TIFFwriter バージョンにはそのコードがありません。私は立ち往生しています、誰か何か?メタデータの一部を読み取って何が問題なのかを確認し、修正する方法はありますか?