加快(但保持文件大小较小)将多个 PNG 转换为 PDF?

Posted

技术标签:

【中文标题】加快(但保持文件大小较小)将多个 PNG 转换为 PDF?【英文标题】:Speed up (yet keep file size low) conversion of multiple PNGs to PDF? 【发布时间】:2017-08-01 03:36:34 【问题描述】:

我需要清理/运行 OCR 的 9k PDF 扫描文本。每个 PDF 的页面都是保存为 .ccitt 的图像,我使用此 Poppler(对于 Windows7)命令将其提取并转换为 .png

pdfimages.exe -png file_in.pdf output/images/path

清理.png 图像后,我使用this ImageMagick command 将它们重新组合成pdf

magick.exe convert -compress Group4 -type bilevel -monochrome input/images/path file_out.pdf

生成的 file_out.pdf 实际上小于 file_in.pdf,但 Group4 仅压缩 18 张图像(大小从 58kb 到 140kb)最多需要 25 秒。 以这种方式将所有图像转换为 9k+ pdf 需要 65 小时 :'(

同样的事情通过GraphicsMagick:

gm convert -compress Group4 -type bilevel -monochrome input/images/path file_out.pdf

file_out.pdf 膨胀到大小是file_in.pdf 的 40 倍以上

我错过了什么?我认为 GraphicsMagick 应该比 ImageMagick 更精简/更简洁。

【问题讨论】:

不幸的是,如果不安装 mingwGNU Parallel,您将无法在 Windows 下简单地使用所有 CPU 内核,因此一般来说,除了其中一个之外,其他所有内核都会闲置。考虑将您的 PDF 列表拆分为 4 个相等的子列表,并一次运行 4 个命令提示符,每个命令提示符处理一个列表。 【参考方案1】:

ImageMagick 不是用于 PDF 等矢量图像的良好处理器。它将光栅化您的 PDF 并将每个点保存为 pdf 的一个元素。这可能是它需要这么长时间的原因。 PDF 现在是矢量外壳中的光栅图像(比原始矢量图像大得多)。

如果您输入的 PDF 已经是黑白的,那么您只需要压缩组 4。

从 25 KB PDF 开始

如果我只是转换它。

time magick ImageOnly.pdf result1.pdf

real    0m0.276s
user    0m0.563s
sys 0m0.038s

time magick ImageOnly.pdf -compress Group4 result2.pdf

real    0m0.275s
user    0m0.562s
sys 0m0.036s

所以不是第 4 组压缩导致它下降。

但是,质量不会很好。因此,在阅读 PDF 之前应该添加 -density 300 。但这会减慢速度。

time magick -density 300 ImageOnly.pdf -compress Group4 result3.pdf

real    0m2.026s
user    0m2.863s
sys 0m0.182s

【讨论】:

这很好地加快了速度。它肯定仍然很慢......但删除无关的convert 语句有很大帮助。感恩!

以上是关于加快(但保持文件大小较小)将多个 PNG 转换为 PDF?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 将 PNG 转换为 JPG 并进行压缩?

回形针 - 将 SVG 转换为 PNG 时保持透明度

如何将多个 PNG 文件转换为动画 GIF? [关闭]

如何使用 PIL 减小图像文件大小

如何使用 Python Ghostscript 的高级接口将一个 .pdf 文件转换为多个 .png 文件?

Imagemagick 将 png 转换为 jxr