将PostScript转换为GIF的最快方法是什么?

时间:2012-09-26 17:47:28

标签: imagemagick postscript

我现在正在使用ImageMagick convert实用程序。我有一个PostScript文件,大约需要90秒才能转换为GIF。

我正在寻找一种更快的方法,通过修改“转换”选项来实现这一目标。

当我说“快”时,理想情况下只需几秒钟,但我会加快速度。适合交互式GUI的东西。

我只需要黑白或灰度(特别是它是地震数据的图像“摆动痕迹”所以B& W很好。)

其他可接受的格式是BMP,GIF,JPEG,JPG,PCX,PGM,PNG,PNM,PPM,RAS,TGA,TIF或TIFF。

尝试坚持使用已安装的ImageMagick并试图避免出售任何新的老板。仍然很高兴听到其他建议。

2 个答案:

答案 0 :(得分:4)

我的建议是:使用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(以及它用于调用的参数 - 在包含gsgsx或{{的 stderr 上查找打印行1}}或gswin32c)通过运行例如:

gswin64c

<强>更新

我确实运行了一个非常非科学的“基准”,每个100次运行以下两个命令,将随机选取的official PDF specification (ISO version for PDF-1.7)页面333转换为GIF,测量所消耗的时间。我同时并行运行这些命令,因此两者都必须处理相同的整体系统负载,使结果更具可比性:

  1. '舒服'使用ImageMagick的 convert -verbose some.pdf[0] some.gif 直接制作GIF:

    convert
  2. 使用Ghostscript从同一页面创建灰度PNG,将Ghostscript的输出传输到ImageMagick的time for i in $(seq -w 1 100); do convert \ PDF32000_2008.pdf[333] \ p333-im-no_${i}.gif ; done 以获取GIF:

    convert
  3. 第一个命令的定时结果(运行'舒适'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 来实现PDF-&gt; GIF转换,它只在'我们背后'使用Ghostscript):

    convert

    第二个命令的计时结果(直接+公开运行real 2m29.282s user 2m22.526s sys 0m5.647s ,将其输出汇总到gs

    convert

    还有一件事:

    • 100'Ghostscript'-GIF的总大小为1,6 MByte - 但它们是8位灰度。

    • 100'ImageMagic-direct'-GIF的总大小为1,2 MByte - 但它们是2位黑+白。

    • 我目前没有动力调整测试命令行参数,以便更加可比较生成的文件。

    这个结果(149秒对87秒)让我充分相信我的猜测,当你按照我的建议时,你可以获得显着的性能提升。 : - )

答案 1 :(得分:1)

  

我现在正在使用ImageMagick转换实用程序。我有一个   PostScript文件大约需要90秒才能转换为GIF。

     

我正在寻找一种更快的方法,通过修改它来实现这一点   “转换”的选项。

     

当我说“快”时,理想的是几秒钟,但我会采取任何重要的   加速。适合交互式GUI的东西。

     

我只需要黑白或灰度(特别是它)   是地震数据“摆动痕迹”的图像,所以B&amp; W很好。)

您可以从GhostScript开始:

 gs -dSAFER -dBATCH -dNOPAUSE \
    -sDEVICE=pnggray -r300 -sOutputFile=seismic.png seismic.pdf

更长但有趣的方法是准确分析这些PDF中的

我必须使用EKG工作流程的PDF输出做类似的事情。原始数据不可用,我们只有PDF,但我发现PDF是基于矢量而不是光栅。经过一点点黑客攻击后,很容易解码构成EKG图表的标签,图例和单个基本线,我想出了一个从灰度图像开始重新着色轨迹的选项。但确实需要几天时间。

您的PDF可能以类似的方式生成,并且数据可能会被解码(起初我必须使用pdftk来获取非压缩PDF,然后我找到了一个库,我可以使用 - 它实现了Deflate算法)。以SVG格式输出真的很酷: - )