我正在编写一个程序,该程序应该接收一堆 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) 在 com.sun.media.imageioimpl.plugins.tiff.TIFFImageMetadata.initializeFromStream(TIFFImageMetadata.java:110) 在 com.sun.media.imageioimpl.plugins.tiff .TIFFImageReader.readMetadata(TIFFImageReader.java:336) ... 还有 9 个
我确实确保添加了正确的 JAI 库,并且我的阅读器使用的是“TIFF”类型,因此阅读器(和作者)是正确的,但由于某种原因元数据是错误的。现在我可以在 Windows 中正常打开和查看所有这些图像,因此它们真的没有损坏或任何东西。Java 只是不想正确阅读它们。由于我只是稍后使用流数据将它们写出来,所以我不太关心元数据,我只需要它在文件中读取到列表中,以便我可以附加它。我确实在 writer 上找到了 writer.replaceImageMetaData 方法,但 IOWriter 的 TIFFwriter 版本没有它的代码。我被困住了,有人吗?有没有办法读取部分元数据以查看错误并修复它?