如何通过Java拼贴读取TIFF文件?

时间:2014-10-01 10:16:00

标签: java tiff java-io jai

我们说我有一个非常大的TIFF图像作为输入。由于我必须遵守的内存规范,我无法完全加载此图像。所以以下不是一个选项:

BufferedImage data = ImageIO.read(image);

是否有任何Java库允许在不缓冲整个图像的情况下读取图像的特定部分?或者从流中获取TIFF图块的一些方法?

3 个答案:

答案 0 :(得分:6)

ImageIO可以为您提供Tiff的ImageReader,然后您可以使用readTile。 ImageIO有几种getImageReadersBy...方法。

我不知道ImageIO是否支持tiff,但ImageIO使用java SPI,因此可以插入ImageReader和ImageWriters。

实际上,这是read的快捷方式,其中为{tile设置了ImageReadParam

从未使用过瓷砖,但看到之前的答案,我想指出这个选项。

答案 1 :(得分:1)

本机Java库中无法读取其组件中的Tiff文件....因此,您无论是使用外部库还是构建自己的库都会遇到困难。

@Joop提供了一个我不知道的本地Java库的链接(了解你的工具!)如果你找不到所需的全部支持,你可能会发现以下内容:

Tiff文件的规范并不是非常复杂。我会考虑为它编写自己的文件阅读器。

Java JAI看起来已经显着扩展了对读取和解析TIFF文件的支持。考虑:

答案 2 :(得分:1)

作为@Joop答案的补充:

所有ImageIO ImageReader实施都支持指定了源区域ImageReadParam的{​​{1}},因此您只能提取整个图像的特定区域。这适用于任何读者,即使基础格式不支持平铺,也不管平铺TIFF(或其他格式支持平铺)的平铺大小。

示例:

ImageReadParam.setSourceRegion(rect)

也就是说,使用TIFF格式读取图像瓦片可能是实现所要求的最有效方式。 : - )