我收到需要作为未压缩 TIFF 文件写入其他地方的大型 CCITT Group 4 压缩 TIFF 文件。我正在使用 jai_imageio TIFF 读取器和写入器来执行此操作,只要图像的乘积 _width * height_ 适合整数,它就可以很好地工作。
这是我正在使用的代码:
TIFFImageReaderSpi readerSpi= new TIFFImageReaderSpi();
ImageReader imageReader = readerSpi.createReaderInstance();
byte[] data = blobManager.getObjectForIdAndVersion(id, version);
ImageInputStream imageInputStream = ImageIO.createImageInputStream(data);
imageReader.setInput(imageInputStream);
TIFFImageWriterSpi writerSpi = new TIFFImageWriterSpi();
ImageWriter imageWriter = writerSpi.createWriterInstance();
ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
imageWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);
//bufferFile is created in the constructor
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(bufferFile);
imageWriter.setOutput(imageOutputStream);
//Now read the bitmap
BufferedImage bufferedImage = imageReader.read(0);
IIOImage iIOImage = new IIOImage(bufferedImage, null, null);
//and write it
imageWriter.write(null, iIOImage, imageWriteParam);
不幸的是,我收到的文件通常非常大,无法创建 BufferedImage。我一直在尝试找到一种从 ImageReader 直接流式传输到 ImageWriter 的方法,但我不知道如何做到这一点。有人有建议吗?