Java图像缩放,无需将整个图像加载到内存中

Nei*_*man 3 java imageicon javax.imageio jmagick

我们有一些非常大的jpg,在A0打印机上打印时使用.

问题是我们需要将这个大图像转换为缩略图,以便在一些Java UI中使用.

有没有办法转换图像(使用Java)而不将整个图像加载到内存中?目前,当我们尝试加载图像时,我们会出现内存异常.

标准代码中是否有任何内容或者我最好使用jmagick?纯Java实现最适合我们的部署.

谢谢

Nei*_*man 7

我设法让它工作,完整的代码如下.

对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);
Run Code Online (Sandbox Code Playgroud)

  • 宽度和高度不是图像大小,而是像素之间前进的像素数.所以它实际上是源大小和所需输出大小的比率. (2认同)