3
我们有一些非常大的jpgs,它们在A0打印机上打印时使用。Java图像缩放,无需将整个图像加载到内存中
问题是我们需要将这个大图像转换为缩略图以便在几个Java UI中使用。
是否有任何方式转换图像(与Java)没有加载到内存的整个图像?目前,我们尝试加载图像时出现内存不足异常。
标准代码中是否有任何内容或者我最好使用jmagick?纯Java实现对我们的部署来说是最好的。
谢谢
我们有一些非常大的jpgs,它们在A0打印机上打印时使用。Java图像缩放,无需将整个图像加载到内存中
问题是我们需要将这个大图像转换为缩略图以便在几个Java UI中使用。
是否有任何方式转换图像(与Java)没有加载到内存的整个图像?目前,我们尝试加载图像时出现内存不足异常。
标准代码中是否有任何内容或者我最好使用jmagick?纯Java实现对我们的部署来说是最好的。
谢谢
我设法让它工作,完整的代码如下。
对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);
宽度和高度不是图像大小,而是像素之间的前进像素数。所以它真的是源码大小和所需输出大小的比率。 –
重复的问题:?加载大型图像作为不需要在Java内存问题缩略图(http://stackoverflow.com/questions/5874593/loading-large-images-as-thumbnails-without-memory-issues -in-java) – Robert
我确实看到这个,但无法让它工作,因为它一直说“java.lang.IllegalStateException:输入未设置” –