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

标签 java javax.imageio imageicon jmagick

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

问题是我们需要将这个大图像转换为缩略图以便在一些 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图像缩放而不将整个图像加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10817597/

相关文章:

java - 如何以编程方式获取 Grails 服务的实例?

java - 为什么在paint或paintComponent方法中语句被执行多次?

java - 用Java处理图像,而不是标签

java - 调整数组大小图标

java - 如何更改JList java中的描述图像

java - 使用 eclipse 插件在 cloudfoundry 上部署 .rar

java - Android Java 对象列表与图像

java - 用 Java 读取渐进式编码的 9000x9000 JPEG 需要 1 分钟

java - 包装 byte[] 的 ImageInputStreamImpl 实现

java - Netbeans ImageIcon 不显示