Java图像缩放而不将整个图像加载到内存中

3
我们有一些很大的jpg文件,用于A0打印机打印时使用。
问题在于,我们需要将这些大图像转换为缩略图,以在一些Java用户界面中使用。
有没有办法在Java中转换图像而不将整个图像加载到内存中?目前,当我们尝试加载这些图像时,会出现内存不足异常。
标准代码中是否有任何工具可用,还是我最好使用jmagick?对于我们的部署,最好使用纯Java实现。
谢谢。

我看到了这个,但是无法使其工作,因为它一直显示“java.lang.IllegalStateException: Input not set”。 - Neil Wightman
1个回答

8

我成功地让它运行起来了,以下是完整的代码。

调用reader.setInput(iis, true, true)是我在之前的帖子中缺失的关键步骤。

FileInputStream fin = new FileInputStream(source);

ImageInputStream iis = ImageIO.createImageInputStream(fin);

Iterator iter = ImageIO.getImageReaders(iis);
if (!iter.hasNext()) {
    return;
}

ImageReader reader = (ImageReader) iter.next();

ImageReadParam params = reader.getDefaultReadParam();

reader.setInput(iis, true, true);

params.setSourceSubsampling(width, height, 0, 0);

BufferedImage img = reader.read(0, params);

ImageIO.write(img, "JPG", destination);

2
宽度和高度不是图像的大小,而是像素之间前进的像素数。因此,它实际上是源大小和所需输出大小的比率。 - Neil Wightman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接