我的建议是:使用 Ghostscript。
由于您已经安装了工作正常的 ImageMagick,这意味着 Ghostscript 也在那里:因为 ImageMagick 无法自行将 PDF 或 PostScript 转换为光栅图像 - 它必须调用 Ghostscript 作为其委托无论如何都要这样做。
Ghostscript 可以直接将 PDF/PostScript 输入转换为 TIFF/TIF/TIFFg4、JPEG、PBM、PCX、PNG、PNM、PPM、BMP 光栅图像输出。
优点是:您不需要使用 ImageMagick。所以它更快,也让您更直接地控制转换参数。如果您通过 ImageMagick 运行 Ghostscript,那是一个并不总是需要的间接级别。 (有时可能需要为 Ghostscript 生成的光栅图像数据添加一些微调和后处理操作 - 但您似乎并非如此。)
唯一的缺点是: Ghostscript 不能生成 GIF。如果您需要 GIF(您似乎不需要),则需要 ImageMagick 将 Ghostscript 的光栅输出后处理为 GIF。
您可以看到 ImageMagick 如何调用 Ghostscript(以及它用于调用的参数 - 在 stderr 上查找包含 gs、gsx 或 gswin32c 或 @987654325 的打印行@) 通过运行例如:
convert -verbose some.pdf[0] some.gif
更新
我确实运行了一个非常非常不科学的“基准”,分别运行以下两个命令 100 次,将official PDF specification (ISO version for PDF-1.7) 的随机选择的第 333 页转换为 GIF,测量消耗的时间。我同时并行运行这些命令,因此它们都必须处理相同的整体系统负载,从而使结果具有更好的可比性:
-
使用ImageMagick的convert直接生成GIF的“舒服”:
time for i in $(seq -w 1 100); do
convert \
PDF32000_2008.pdf[333] \
p333-im-no_${i}.gif ;
done
-
使用 Ghostscript 从同一页面创建灰度 PNG,将 Ghostscript 的输出传送到 ImageMagick 的 convert 以获得 GIF:
time for i in $(seq -w 1 100); do
gs \
-q \
-o - \
-dFirstPage=333 \
-dLastPage=333 \
-sDEVICE=pnggray \
PDF32000_2008.pdf \
| \
convert \
- \
p333-gs-no_${i}.gif ;
done
第一个命令的计时结果(运行“舒适”convert 以实现 PDF->GIF 转换,它仅在“背后”使用 Ghostscript):
real 2m29.282s
user 2m22.526s
sys 0m5.647s
第二个命令的计时结果(直接运行gs + 公开,将其输出到convert:
real 1m27.370s
user 1m23.447s
sys 0m3.435s
还有一件事:
100 个“Ghostscript”-GIF 的总大小为 1.6 MB,但它们是 8 位灰度。
100 个“ImageMagic-direct”-GIF 的总大小为 1.2 MB,但它们是 2 位黑白。
我目前没有动机进一步调整测试命令行参数以使结果文件更具有可比性。
这个结果(149 秒对 87 秒)让我对我的猜测有足够的信心,即当您遵循我的建议时,您可以获得显着的性能改进。 :-)