如何调整图像大小而不加载到内存中?

Bor*_*tin 5 java graphics 2d javax.imageio

我想检查图像的尺寸,然后在宽度超过给定阈值时调整尺寸.当我使用ImageIO.read()加载6MB JPEG图像时,BufferedImage会分配大约45MB的堆空间.有没有办法在不将所有数据加载到内存中的情况下调整直通图像大小?我尝试传递ImageIO.read()一个File对象,认为它会从磁盘流式传输数据,但它没有帮助.

Ben*_*rns 3

查看im4javaJMagick两者都使用名为ImageMagick 的极其高效的外部工具来进行图像处理。Im4Java 调用命令行应用程序(在单独的进程中工作),而 JMagick 通过 JNI 在同一进程中调用它。

如果我正在做简单的图像处理(调整大小、缩放、旋转等),我宁愿让 ImageMagick 为我做。与您在相似时间内实现的任何方法相比,它会更快、更可靠,并且消耗的内存更少。

希望这可以帮助!