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

时间:2019-01-15 20:18:18

标签: java image image-processing tiff javax.imageio

我正在使用Java 11,试图用ImageIO编写压缩的TIFF图像。大多数图像都能正确写入,但是某些图像会从javax.imageio代码内引发IIOException。我的应用程序使用Graphics 2D调整图像大小,然后将其写入文件。例外是:

  

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

这是我创建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,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 T.6”。压缩肯定与此错误有关。如果我省略了这些行:

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

然后不引发IIOException! 在我的测试图像批次中,无论压缩类型是什么,相同的图像都会失败。但是,如果没有压缩,则将成功写入所有图像。 所以我想问题是,为什么在这里写入压缩图像失败?

0 个答案:

没有答案