我正在接收大型CCITT Group 4壓縮的TIFF文件,這些文件需要作爲未壓縮的TIFF文件在其他位置寫入。我使用jai_imageio TIFF閱讀器和書寫器來做到這一點,只要圖像的產品_width * height_適合整數,它就可以很好地工作。解壓縮TIFF文件而不經過BufferedImage
這裏是我使用的代碼:
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,但我無法找到如何做到這一點。 任何人有建議嗎?
謝謝,但這不是我的選擇。首先,因爲它不是開源的,只能在Windows下運行。如果我決定使用本機代碼,我可以很容易地使用libtiff編寫自己的解壓縮程序。 – Gert
你可以在Linux上使用ImageMagik做同樣的事情:) – Ewald
我的問題是關於JAI類。我知道在Java環境之外還有其他的解決方案,但這不是我正在尋找的。 – Gert