Я пишу программу, которая должна собрать кучу мелочей и собрать их воедино. Я заставил его работать с большинством файлов изображений, которые я читал, но большая их партия выдает ошибку, когда я пытаюсь их прочитать.
Вот фрагмент кода, который у меня есть:
int numPages = 0;
inStream = ImageIO.createImageInputStream(imageFile);
reader.setInput(inStream);
while(true){
bufferedImages.add(reader.readAll(numPages, reader.getDefaultReadParam()));
numPages++;
}
Да, я улавливаю исключение за пределами поля, поэтому нам не о чем беспокоиться. Моя проблема в том, что я получаю следующую ошибку:
javax.imageio.IIOException: ошибка ввода-вывода при чтении метаданных изображения! на com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.readMetadata (TIFFImageReader.java:340) на com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.seekToImage (TIFFImage.sun10) atjava. .media.imageioimpl.plugins.tiff.TIFFImageReader.prepareRead (TIFFImageReader.java:971) по адресу com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.read (TIFFImageReader.java:1153ageio.java.Reader.java:1153) в java.avax.image (ImageReader.java:1067) на sel.image.appender.ImageAppender.mergeImages (ImageAppender.java:59) на sel.imagenow.processor.AetnaLTCProcessor.processBatch (AetnaLTCProcessor.java:287) по адресу sel.imagenow.processor.Aetorna. processImpl (AetnaLTCProcessor.java:81) в sel.processor.AbstractImageNowProcessor.process (AbstractImageNowProcessor.java:49) в sel.RunConverter.main (RunConverter.java:37)
Вызвано: исключение java.io.EOFException в javax.imageio.stream.ImageInputStreamImpl.readShort (ImageInputStreamImpl.java:229) в javax.imageio.stream.ImageInputStreamImpl.readUnsignedShort (ImageInputStreamImpl.java.sioplmedia) в .plugins.tiff.TIFFIFD.initialize (TIFFIFD.java:194) по адресу com.sun.media.imageioimpl.plugins.tiff.TIFFImageMetadata.initializeFromStream (TIFFImageMetadata.java:110) по адресу com.sio.media.pl .TIFFImageReader.readMetadata (TIFFImageReader.java:336) ... еще 9
Я обязательно добавил правильную библиотеку JAI, и мой читатель использует тип "TIFF", поэтому читатель (и писатель) верны, но по какой-то причине метаданные неверны. Теперь я могу нормально открывать и просматривать все эти изображения в Windows, чтобы они не были повреждены или что-то в этом роде. Java просто не хочет их правильно читать. Поскольку я просто использую потоковые мясные данные, чтобы записать их позже, меня не очень волнуют метаданные, мне просто нужно, чтобы они были прочитаны в файле в списке, чтобы я мог добавить их. Я нашел метод writer.replaceImageMetaData на писателе, но в версии IOWriter для TIFFwriter нет кода для него. Я застрял, кто-нибудь что-нибудь? Может быть, есть способ прочитать части метаданных, чтобы увидеть, что не так, и исправить это?
reader.getNumImages()
? Может быть ошибка вTIFFImageReader
(возможно, в парсере IFD) или изображение могло иметь плохой / поврежденный IFD. Если возможно, это может помочь, если вы разместите ссылку на одно из изображений, вызывающих проблемы. - person Harald K   schedule 12.08.2013readAll
, если вам не нужны метаданные? Разве простойread
не годится? - person Harald K   schedule 12.08.2013