【问题标题】:Conversion PDF to PNG or JPEG is very very slow using ImageMagick使用 ImageMagick 将 PDF 转换为 PNG 或 JPEG 非常慢
【发布时间】:2012-09-15 18:16:50
【问题描述】:

我有一个使用 PHP 和 ImageMagick 的 PDF 到 PNG 转换脚本,但转换速度有问题。

我知道它可以工作,因为对于非常小的 PDF,转换所需的时间并没有那么长,但是对于 250kb 的文件(实际上仍然没有那么大),转换需要超过 20 分钟。

这是 PHP:

//***** GET PATH TO IMAGEMAGICK *****
$path_to_imagemagick = trim(`which convert`);

//***** PATH TO PDF TO CONVERT *****
$path_to_pdf = getcwd() . "/pdf/myfile.pdf[0]";

//***** PATH TO OUTPUT TO *****
$output_path = getcwd() . "/pdfimage/test_converted.png";

@exec($path_to_imagemagick . " -density 72 -quality 60 -resize 150x " . $path_to_pdf . " " . $output_path);

我可以更改任何设置以加快速度吗?

如果有帮助,图像不需要是 PNG。如果 JPEG 会更快,我很乐意这样做。

【问题讨论】:

  • 命令行的转换速度是多少?所有 250kb 的 PDF 文件需要 20 分钟,还是只是一个特定的 PDF?此 PDF 包含多少页?
  • 经过调查,似乎只有某些 PDF 文件难以处理。一些较大的在几秒钟内完成,一些较小的超时。 ImageMagick 是否会遇到某种 PDF 设置?
  • 有许多 PDF,大多数甚至所有 PDF查看器、渲染器或解释器可能会遇到困难...其中一个臭名昭著的功能可能使用 transparenies 和/或 drop shadows 的页面区域的解释速度较慢。 -- 另外,正如我在回答中解释的那样,处理 PDF-> 图像转换的不是 ImageMagick -- 它是 Ghostscript。而且较新版本的 Ghostscript 往往很多更好地处理更现代的 PDF(例如由 Adob​​e CS6、Acrobat X、InDesign 5 或其他创建的 PDF)——您是哪个版本的 Ghostscript使用? (输出:gs -v
  • 如果你能提供(链接到)渲染速度慢的示例 250kb PDF,我可以详细分析。

标签: php imagemagick image-conversion


【解决方案1】:

ImageMagick 本身根本无法将 PDF 转换为光栅图像。

ImageMagick 使用 delegate 来完成这项工作:该委托是 Ghostscript。如果您没有在与 ImageMagick 相同的系统上安装 Ghostscript,convert 的 PDF 转换将无法正常工作。

为了提高速度,不要将 ImageMagick 用于 PDF -> 光栅图像转换。而是直接使用 Ghostscript(也可以通过 PHP)。

JPEG 输出命令行:

gs                                 \
  -o ./pdfimage/test_converted.jpg \
  -sDEVICE=jpeg                    \
  -dJPEGQ=60                       \
  -r72                             \
  -dLastPage=1                     \
   pdf/myfile.pdf

PNG 输出命令行:

gs                                 \
  -o ./pdfimage/test_converted.png \
  -sDEVICE=pngalpha                \
  -dLastPage=1                     \
  -r72                             \
   pdf/myfile.pdf 

这两个命令都会为您提供未缩放的输出。

要缩小输出,您可以使用类似

gs                                 \
  -o ./pdfimage/test_converted.png \
  -sDEVICE=pngalpha                \
  -dLastPage=1                     \
  -r72                             \
  -dDEVICEWIDTHPOINTS=150          \
  -dDEVICEHEIGHTPOINTS=150         \
  -dPDFFitPage                     \
   pdf/myfile.pdf 

另外请注意:您为 PNG 输出命令使用了 -quality 60 设置。但是对于 JPEG 输出的 -quality 和对于 PNG 输出的 -quality 在 ImageMagick 中确实具有完全不同的含义(您可能没有意识到这一点)。另请参阅 this answer 了解有关此内容的一些详细信息。

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 2013-08-17
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2012-03-02
    • 2011-06-12
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多