我需要一个 Java 软件或程序,或者一种平铺非常大的图像(大于 140MB)的方法。我使用了 ImageMagick 和转换工具 Photoshop 和 Corel Draw 和 Matlab(在 Windows 中),但是我遇到了内存过载的问题。ImageMagick 非常慢,结果不理想。我不知道如何只将一小部分图像加载到内存而不从硬盘加载整个图像。
4 回答
它不是 Java,但 Inter Performance Primitives (IPP) 具有一组适用于图块的图像处理函数。您可能可以从 Java 接口这些函数。
JAI 依赖于平台,现在看起来像是一个死项目。
我建议使用开源程序imagemagick。尽管它依赖于平台,但它可用于与 JAI 相同的平台,但具有完整的社区支持。
关于 imagemagick 的大图像的技巧是使用它的“流”命令而不是转换命令。Stream 仅读取图像的相关部分并将提取的部分保存为原始数据。然后,您需要“转换”以将小的原始数据保存为 jpeg。
将大小为 800x600 的块从位置 0x0 保存到 tile.jpeg 的示例:
stream -extract 800x600+0+0 large.jpeg tile.rgb
convert -depth 8 -size 800x600 rgb:tile.rgb tile.jpeg
(在windows上运行时,一定要使用ImageMagick的convert.exe,因为windows有一个名为“convert”的命令。)
仅使用 TIFF 图像时,apache Sanselan可能是正确的选择——它是一个纯 Java 图像库。此外,JAI 似乎包含一个独立于平台的 TIFF 编解码器。
您应该查看 Java Advanced Imaging (JAI) API,它为平铺大图像提供了开箱即用的支持。这是一个有点复杂的 API,文档也有点稀疏,但我们在一个项目中使用它来查看非常高(但很窄)的图像,每张大约 60 mb。
以下是一些帮助您入门的链接:
如果您使用本机代码,诸如 libjeg 之类的库可以为您提供对图像的扫描线访问权限 - 您一次最多需要加载 16 个扫描线。