【问题标题】:Lossless image extraction from PDF从 PDF 中无损提取图像
【发布时间】:2019-11-14 15:58:34
【问题描述】:

我正在使用 PDFBox 从 PDF 文件中提取图像并将其提供给另一个图像处理库(可以处理不同的图像格式)。我现在的代码是这样的:

PDImageXObject pdImage;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedImage image = pdImage.getImage();
ImageIO.write(image, "png", baos);
byte[] imageBytes = baos.toByteArray();

这将获取 PDF 文件中存储的任何内容,并使用 Java 图形将其转换为 PNG。有没有更好的方法来避免转换并以嵌入的任何格式提取图像?我不想降低图像质量(我想通过使用像 PNG 这样的无损格式来缓解?)并产生转换开销。

【问题讨论】:

  • 查看ExtractImages.java的源代码,它完全取决于参数。

标签: java pdf image-processing pdfbox


【解决方案1】:

FlateDecode 过滤器和 PNG 文件格式使用 DEFLATE 算法。然而,FlateDecode 压缩数据流本身不是 PNG 文件。

此外,您需要考虑图像 XObject(例如 DeviceCMYK)的颜色空间表示与 PNG 实际支持的颜色。

通过对输出图像文件进行无损压缩,您不会丢失任何信息。 (请确保您确实需要无损提取的图像,人们通常认为有损压缩意味着他们的图像现在将发生如此多的变化,以至于不再可识别。尽管在许多情况下,取决于参数,肉眼几乎看不到损失,您可以大大受益于有损压缩的大小节省。)

如果性能很慢,可能只是负责提取图像并保存的 PDF 软件的质量。

【讨论】:

    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多