2012-05-30 39 views
3

我们有一些非常大的jpgs,它们在A0打印机上打印时使用。Java图像缩放,无需将整个图像加载到内存中

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

是否有任何方式转换图像(与Java)没有加载到内存的整个图像?目前,我们尝试加载图像时出现内存不足异常。

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

谢谢

+0

重复的问题:?加载大型图像作为不需要在Java内存问题缩略图(http://stackoverflow.com/questions/5874593/loading-large-images-as-thumbnails-without-memory-issues -in-java) – Robert

+0

我确实看到这个,但无法让它工作,因为它一直说“java.lang.IllegalStateException:输入未设置” –

回答

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); 
+1

宽度和高度不是图像大小,而是像素之间的前进像素数。所以它真的是源码大小和所需输出大小的比率。 –

相关问题