13

我在让 ImageMagick 和 Ghostscript 一起工作时遇到了麻烦——从安装到测试再到实际使用该软件,一切似乎都很困难。有没有人有任何提示?

4

3 回答 3

39

我刚刚花了三个小时让 ImageMagick 与 PHP 很好地配合,以实现 PDF 到 JPG 的转换。与其自己在本地记录,我想我会在这里写下所有流行语和我搞砸的东西,这样下一个菜鸟可以节省一些时间。

在两个操作系统上测试,Windows 7 x64 和 Vista x64,使用 PHP 5.2.8 和 Apache 2.2.11。

您将需要 Ghostscript 和 ImageMagick。我得到了gs871w64.exeImageMagick-6.6.3-0-Q16-windows-x64-dll.exe

对 ImageMagick 进行基本安装(我现在称它为 IM)。仔细检查系统路径变量以确保您可以从任何地方进行 IM。它应该指向 IM 目录。使用以下行测试安装cmd:(convert test.gif test.jpg假设您有test.gif)。工作正常。

测试 PDF 转换 ( convert test.pdf test.jpg)。您应该收到关于“gswin32c.exe”和“Postscript 委托失败”和“缺少图像文件名”的(长)消息。这意味着 IM 找不到 PDF“翻译器”。你需要Ghostscript。

安装 Ghostscript(我现在称它为 GS)。由于某种原因,我不得不在它之前做两次。将 GS 文件夹中的“bin”地址添加到系统变量中。测试安装,gswin32 test.pdf您应该会在 GS 查看器中看到您的文件弹出。重要提示: gs在 Windows ( )中不起作用。'gs' is not recognized as an internal or external command, operable program, or batch file.您需要使用gswin32

回到 IM 测试:convert test.pdf test.jpg现在应该可以工作了。

现在转到 PHP - 编写这个脚本:

$out = shell_exec("convert blah.pdf blah2.jpg 2>&1");
echo $out;

2>&1 会将所有错误移动到标准输出中,以便您可以更好地诊断内容:)。现在,您的 PHP 脚本可以在 cmd 提示符下运行,但是当您在浏览器中运行它时没有任何反应。拍打你的额头并重新启动 Apache。

pant详尽且可能是基本的,我知道。但希望对大约 20 页的半有用线索有所帮助。

于 2011-11-30T04:30:17.160 回答
10

Steve 已经提供了从 PHP运行命令行版本的 ImageMagick 的指南。在安装 ImageMagick 的扩展版本有类似的经验之后,我想详细说明一下不同组件如何协同工作。

Imagick(PHP 扩展)

首先,您需要 PHP 扩展。它基本上是 PHP 和 ImageMagick 函数之间的适配器。

然而,这还不够。php_imagick.dll不包含任何 ImageMagick 功能,并且与扩展捆绑在一起的DLLCORE_RL_...不完整。您还需要来自 ImageMagick 版本的更多 DLL。

从理论上讲,版本不必完全匹配,但显然在 ImageMagick 6.8.1 和 6.8.8 之间的某个地方,该函数MagickGetImageMatte已从 DLL 中删除,因此最安全的方法是找到与构建 Imagick 扩展完全相同的 ImageMagick 版本为了:

  • 在 Windows 资源管理器中,请参阅捆绑的 CORE_RL_wand_.dll 的属性 → 详细信息以查找此扩展所针对的 ImageMagick 版本。(您还应该能够在 phpinfo 中找到此信息。)
  • 下载确切的 ImageMagick 版本,例如从http://windows.php.net/downloads/pecl/deps/(感谢这个人的链接)
  • 将 ImageMagick ZIP 中的所有 DLL 复制到 php5(n)ts.dll(Apache 的 PHP 引擎)所在的同一目录

不需要安装ImageMagick。事实上,如果你的 PATH 中碰巧有一个不兼容的 ImageMagick,PHP 扩展可能会失败。

鬼脚本

这适用于 ImageMagick ( convert) 的命令行版本和上述 PHP 扩展。

要读取 Postscript 系列的文件,需要 Ghostscript。

ImageMagick 将按照以下步骤找到 Ghostscript:

  • 如果注册表中有一个GS_DLL条目,指向 的路径gswin32.dll,它将使用该条目并完全忽略委托。
  • 否则它将咨询它的“代表”。似乎有一个硬编码的后备,但您可以通过将delegates.xmlnextphp5(n)ts.dllconvert.exe分别或 in来覆盖它~\.magick
  • 如果它@PS_Delegate@在委托中找到该字符串,它将替换它,gswin32c.exe然后继续在 PATH 中查找该 EXE。您可以将此字符串替换为ImageMagick 应调用的完整路径gswin32c.exe或什至该路径。gswin64c.exe
于 2015-08-23T05:56:50.283 回答
1

我遇到了同样的问题,我为 Windows(64 位)安装了 Ghostscript 9.54.0,它解决了我的问题:

遵循以下步骤:

  1. 转到https://www.ghostscript.com/download.html单击“Postscript 和 PDF 解释器/渲染器:”下的 Ghostscript。它打开了一个新页面:https ://www.ghostscript.com/download/gsdnld.html

  2. 从页面安装了适用于 Windows(64 位)的 Ghostscript 9.54.0。

  3. 下载后安装到windows机器上。

之后重述内核并重新执行 jupyter notebook。

于 2021-07-15T18:10:44.567 回答