繁体   English   中英

将图像从 PDImageXObject 提取到文件中而不将其加载到内存中

[英]Extract image into a file from PDImageXObject without loading it into memory

这与如何有效地从 PDF 中提取图像字节有关,但我将尝试以不同的方式重述问题,因此它与 PDF 解析无关,而与图像处理有关。

我正在使用 PDFBox 从 PDF 文件中提取图像。 有一个PDImageXObject类表示 PDF 内部的图像,其中包含图像元数据(高度、宽度等),并公开了两个用于提取图像的 API: BufferedImage getImage()BufferedImage getImage(Rectangle rect, int subsampling); .

当前的代码很简单:

BufferedImage image = pdImage.getImage();
ImageIO.write(image, "jpg", baos);

但是,对于大图像,我遇到了内存使用问题,因为 BufferedImage 将未压缩的图像数据存储在内存中,这比压缩结果大得多。

有没有办法通过将整个图像分解成图块(例如 1024x1024)并使用采用RectanglegetImage签名迭代它们来避免将整个图像加载到内存中? 我看到了一些关于 JAI 能够使用 Tiles 输出压缩图像而无需立即将未压缩内容加载到内存中的有希望的信息,但我不明白如何将它与我从 PDImageXObject 中获得的内容联系起来。 或者有其他方法可以做到吗? JAI 仍然是一个活跃的项目吗?

顺便说一句,提取图像的目的是将其馈送到管道中可以处理多种图像格式的下一个组件。 因此,如果 jpg 以外的某种格式更适合平铺处理,那应该没问题。

我知道使用BigBufferedImage 之类的东西的一种可能性。 但我认为一次处理一个 Tile 看起来很有希望。

好的,我找到了一个库: Commons Imaging Class Imaging或许可以帮到你。

我想你可以试试createInputStream()方法,找出真实数据的大小(字节长度)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM