Проблемы записи файлов TIFF с ImageIO - PullRequest
0 голосов
/ 15 января 2019

Я использую Java 11, пытаюсь написать сжатые изображения TIFF с ImageIO. Большинство изображений пишутся правильно, но некоторые изображения генерируют исключение IIOException из кода javax.imageio. Мое приложение использует Graphics 2D для изменения размера изображений, а затем записывает их в файл. Исключение составляет:

javax.imageio.IIOException: ошибка ввода-вывода при записи файла TIFF!

Вот фрагмент кода, в котором я создаю ImageWriter и пишу изображение. Исключение выдается из последней строки в этом фрагменте, tiffWriter.write ().

//Create the TiffWriter, tell it where to write
ImageWriter tiffWriter = ImageIO.getImageWritersByFormatName("tiff").next();
tiffWriter.setOutput(imageOut);

//Wrap up the BufferedImage and Metadata in the IIOImage
IIOImage iioImg = new IIOImage(bi, null, meta);

//Set some writing parameters, so we get the G4 compression
ImageWriteParam writeParam = tiffWriter.getDefaultWriteParam();
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType(COMPRESSION_TYPE_GROUP4FAX);

//Write the image
tiffWriter.write(null, iioImg, writeParam);

Соответствующие записи трассировки стека:

File = TIFFImageWriter.java, класс = com.sun.imageio.plugins.tiff.TIFFImageWriter, Method = написать, Line = 2612 Файл = TIFFImageWriter.java, класс = com.sun.imageio.plugins.tiff.TIFFImageWriter, Method = написать, Line = 2315

Дальнейшая информация не предоставляется. Так что я не совсем уверен, какие шаги предпринять дальше. Я знаю, что у меня есть разрешение на запись в месте назначения. Я не могу найти какой-либо шаблон с изображениями, которые не выполняют операцию записи. Кажется, примерно 20% отказов в моей выборке.

Кто-нибудь еще сталкивался с этой ошибкой при записи файлов TIFF?

EDIT: Просто чтобы уточнить, я устанавливаю тип сжатия "CCITT T.6". Сжатие определенно связано с этой ошибкой. Если я опущу строки:

writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType(COMPRESSION_TYPE_GROUP4FAX);

Тогда исключение IIOException не выбрасывается! В моей серии тестовых изображений одни и те же изображения терпят неудачу независимо от типа сжатия. Но если нет сжатия, все изображения пишутся успешно. Поэтому я думаю, что вопрос в том, почему запись сжатого изображения не удается здесь?

...