非常大的图像处理和平铺

时间:2010-04-07 12:13:06

标签: java image tiling

我需要一个Java软件或程序或一个非常大的图像(大于140MB)的方法。 我使用了ImageMagick并转换了工具Photoshop和Corel Draw和Matlab(在Windows中),但是我遇到了内存过载的问题。 ImageMagick非常慢,结果不可取。我不知道如何在不加载硬盘的整个图像的情况下,只将一小部分图像加载到内存中。

4 个答案:

答案 0 :(得分:0)

如果您使用本机代码,libjeg等库会为您提供扫描线对图像的访问权限 - 您最多只需要一次加载16条扫描线。

答案 1 :(得分:0)

您应该查看Java Advanced Imaging(JAI)API,它为平铺大图像提供了开箱即用的支持。这是一个有点复杂的API,文档有点稀疏,但我们在一个项目中使用它来查看每块大约60 mb的非常高(但很窄)的图像。

以下是一些可以帮助您入门的链接:

Process images in Java with JAI

JAI project homepage

答案 2 :(得分:0)

它不是Java,但Inter Performance Primitives(IPP)具有一组用于图块操作的功能,可用于图块。您可以从Java接口这些函数。

答案 3 :(得分:0)

JAI依赖于平台,今天似乎是一个死的项目。

我建议使用开源程序 imagemagick 。虽然它依赖于平台,但它可以与JAI使用相同的平台,但具有完整的社区支持。

关于imagemagick的大图像的技巧是使用其“stream” - 命令而不是convert命令。 Stream仅读取图像的相关部分,并将提取的部分保存为原始数据。然后,您需要“转换”以将小原始数据保存为jpeg。

将大小为800x600的large.jpeg从位置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,因为有一个名为“convert”的Windows命令。)

仅使用TIFF图像时,apache Sanselan可能是正确的选择 - 它是一个纯java的成像库。此外,JAI似乎包含一个独立于TIFF的平台编解码器。

相关问题