ImageMagick/Imagick 使用原生 PHP API 将 PDF 转换为 JPG

Posted

技术标签:

【中文标题】ImageMagick/Imagick 使用原生 PHP API 将 PDF 转换为 JPG【英文标题】:ImageMagick/Imagick convert PDF to JPG using native PHP API 【发布时间】:2010-10-09 23:44:50 【问题描述】:

我正在尝试将 PDF 文件转换为 PNG。它在命令行中运行良好(我确实安装了 GhostScript 8.64)。但是在 php 中我遇到了问题:

代码:

$im = new Imagick($pdf_file); // this is where it throws the exception below

输出:

Fatal error: Uncaught exception ‘ImagickException’ with message ‘Postscript delegate failed `23_1235606503.pdf’: No such file or directory @ pdf.c/ReadPDFImage/612′ in get_thumbnail.php:93
Stack trace:
\#0 get_thumbnail.php(93): Imagick->__construct(’…’)

等等。等等

我不确定我在这里做错了什么,但我怀疑这与我在某处的服务器配置有关。我在跑: 阿帕奇 2.2.11 PHP 5.2.8 ImageMagick 6.4.8-9 GhostScript 8.64

【问题讨论】:

【参考方案1】:

终于想通了。 GhostScript 可执行文件 (gs) 不在 Apache 的环境路径中。它位于/usr/local/bin。虽然我尝试了几种方法将/usr/local/bin 添加到路径中,但我没有成功。我最终在/usr/bin directory 中放置了gs 的符号链接。现在一切正常。

【讨论】:

如何知道apache环境路径是什么? 太棒了!只需添加,像这样创建符号链接:sudo ln -s /usr/local/bin/gs /usr/bin/gs 继续获得Cannot read file error 并修复了它。谢谢兄弟。 在使用 ImageMagick 通过 Apache 和编程语言将 PDF 页面转换为 JPEG 时,即使图像存在并且权限已完全开放,我仍收到错误消息 convert: no images defined ...。卸载 GhostScript 和 ImageMagick 后,用 GS 重新安装 GS 和 IM,添加符号链接终于解决了这个问题。另见github.com/delphian/drupal-convert-file/wiki/…【参考方案2】:

我成功地做到了。这是我用来进行转换的代码。我们正在商业上使用这个解决方案。我知道这个问题已经存在了一段时间,但它仍然可以帮助你。

//Convert PDF contract to image using ImageMagik and Ghostscript
// NOTE: This will need to be change if running on Linux
$source = $appDir."\\".$clientID."\\".$clientID.".pdf";
$dest = $appDir."\\".$clientID."\\".$clientID.".jpg";
//print("c:\\IM\\convert.exe $source $dest ");
exec("c:\\IM\\convert.exe $source $dest ");

【讨论】:

@CarlosBarbosa, convert.exe 是 Windows 版本的 ImageMagick 中包含的二进制文件(在 *nix 操作系统上只是 convert)。虽然我同意这不是最佳答案,但它是解决 OP 遇到的问题的一种方法。【参考方案3】:

我在 *** 上没有“声誉”来添加上面的内联评论,但我必须执行一个额外的步骤才能在我的 Mac 上使用最新的 Sierra 更新。

当你输入命令时:

sudo ln -s /usr/local/bin/gs /usr/bin/gs

在 Mac 上,您可能会收到错误消息“不允许操作”。

显然,Apple 更改了“bin”目录不可编辑,除非您禁用 SIP(​​系统完整性保护)。

以下是执行此操作的步骤:

    通过重新启动计算机并按住“Command + R”直到 Apple 徽标出现在屏幕上,将 Mac 重新启动到恢复模式。 单击实用程序 > 终端 在终端窗口中,输入crutil disable 并按“Enter” 重新启动您的 Mac。

我刚刚完成了这些步骤,现在我的 Ghostscript 运行良好,我成功地将 PDF 转换为 JPG。

【讨论】:

之后我再次启用了系统完整性保护,Ghostscript 仍然有效。

以上是关于ImageMagick/Imagick 使用原生 PHP API 将 PDF 转换为 JPG的主要内容,如果未能解决你的问题,请参考以下文章

中国云原生用户调研报告(2020年):云原生热点技术使用现状全披露

MVVM 原生原生MVVM的使用

下载丨中国云原生用户调研报告(2020年):云原生热点技术使用现状全披露

Electron 使用Node原生模块

使用故事书中的反应原生矢量图标反应原生 Web 问题

首次披露!云原生热点技术国内使用现状 | 趋势分享