Java 使用ImageIO写入TIFF文件时出现问题

Java 使用ImageIO写入TIFF文件时出现问题,java,image,image-processing,tiff,javax.imageio,Java,Image,Image Processing,Tiff,Javax.imageio,我正在使用Java11,试图用ImageIO编写压缩的TIFF图像。大多数图像写入正确,但有些图像在javax.imageio代码中抛出IIOException。我的应用程序是使用二维图形来调整图像大小,然后将它们写入文件。例外情况是: javax.imageio.IIOException:写入TIFF文件时发生I/O错误 下面是我创建ImageWriter并编写图像的代码片段。从该代码段的最后一行tiffWriter.write()引发异常 相关堆栈跟踪条目包括: File=TIFFImage

我正在使用Java11,试图用ImageIO编写压缩的TIFF图像。大多数图像写入正确,但有些图像在javax.imageio代码中抛出IIOException。我的应用程序是使用二维图形来调整图像大小,然后将它们写入文件。例外情况是:

javax.imageio.IIOException:写入TIFF文件时发生I/O错误

下面是我创建ImageWriter并编写图像的代码片段。从该代码段的最后一行tiffWriter.write()引发异常

相关堆栈跟踪条目包括:

File=TIFFImageWriter.java,Class=com.sun.imageio.plugins.tiff.TIFFImageWriter,Method=write,Line=2612 File=TIFFImageWriter.java,Class=com.sun.imageio.plugins.tiff.TIFFImageWriter,Method=write,Line=2315

没有提供进一步的资料。所以我不确定下一步该采取什么措施。我知道我在目标位置有写权限。我似乎找不到任何写操作失败的图像模式。在我的样本中,失败率大约为20%

其他人在编写TIFF文件时是否遇到过此错误

编辑: 为了澄清,我将压缩类型设置为“CCITT.6”。压缩肯定与此错误有关。如果我省略这些行:

writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType(COMPRESSION_TYPE_GROUP4FAX);
那么IIOException不会被抛出! 在我的一批测试图像中,无论压缩类型是什么,相同的图像都会失败。但如果没有压缩,所有图像都会成功写入。
所以我想问题是,为什么在这里编写压缩图像会失败?

我看到了(死)javax:/CCITT T.6/Group 4传真压缩仅适用于两级(黑白)图像。可能您的图像包含不兼容(即颜色或灰度)数据?如果您可以附加(或链接)到导致异常的图像之一,这将非常有用。也就是说,我同意,异常消息确实会更有帮助!:-)从我看到的情况来看,您看到的异常包含了另一个异常。你还可以发布完整的堆栈跟踪和根本原因吗?谢谢@haraldK,当抛出这些异常时,我必须改进我的日志记录。我现在看到TIFFImageWriter如何包装原始异常。顺便说一下,钻头深度是个问题,我已经找到了解决办法。Java2S提供了一个很好的将图像转换为不同位深度的演示:在实现了这个类中的方法之后,TIFFImageWriter编写时没有任何问题。记住,自应答是完全可以接受的,并且会为您赢得rep。
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType(COMPRESSION_TYPE_GROUP4FAX);