【问题标题】:Java image scaling without loading the whole image into memoryJava图像缩放而不将整个图像加载到内存中
【发布时间】:2012-06-04 18:22:33
【问题描述】:

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

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

有没有办法在不将整个图像加载到内存的情况下转换图像(使用 Java)?目前,当我们尝试加载图像时,会出现内存不足异常。

标准代码中有什么或者我最好使用 jmagick 吗?纯 Java 实现最适合我们的部署。

谢谢

【问题讨论】:

标签: java javax.imageio imageicon jmagick


【解决方案1】:

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

调用 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);

【讨论】:

  • width 和 height 不是图像大小,而是在像素之间前进的像素数。所以它实际上是源大小和所需输出大小的比率。
猜你喜欢
  • 1970-01-01
  • 2020-06-11
  • 2013-04-24
  • 2013-03-25
  • 2017-09-22
  • 2012-07-29
  • 2014-03-28
  • 1970-01-01
  • 2011-09-21
相关资源
最近更新 更多