我在让 ImageMagick 和 Ghostscript 一起工作时遇到了麻烦——从安装到测试再到实际使用该软件,一切似乎都很困难。有没有人有任何提示?
3 回答
我刚刚花了三个小时让 ImageMagick 与 PHP 很好地配合,以实现 PDF 到 JPG 的转换。与其自己在本地记录,我想我会在这里写下所有流行语和我搞砸的东西,这样下一个菜鸟可以节省一些时间。
在两个操作系统上测试,Windows 7 x64 和 Vista x64,使用 PHP 5.2.8 和 Apache 2.2.11。
您将需要 Ghostscript 和 ImageMagick。我得到了gs871w64.exe
和ImageMagick-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 页的半有用线索有所帮助。
Steve 已经提供了从 PHP运行命令行版本的 ImageMagick 的指南。在安装 ImageMagick 的扩展版本有类似的经验之后,我想详细说明一下不同组件如何协同工作。
Imagick(PHP 扩展)
首先,您需要 PHP 扩展。它基本上是 PHP 和 ImageMagick 函数之间的适配器。
- 从http://windows.php.net/downloads/pecl/releases/imagick/中选择一个版本
- 在架构(可能是 32 位)、线程安全和编译器(VC9 或 VC11)中下载与您的 PHP 版本相匹配的扩展,请参阅 phpinfo
- 从扩展 ZIP复制
php_imagick.dll
到 PHP 扩展目录
然而,这还不够。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.xml
nextphp5(n)ts.dll
或convert.exe
分别或 in来覆盖它~\.magick
。 - 如果它
@PS_Delegate@
在委托中找到该字符串,它将替换它,gswin32c.exe
然后继续在 PATH 中查找该 EXE。您可以将此字符串替换为ImageMagick 应调用的完整路径gswin32c.exe
或什至该路径。gswin64c.exe
我遇到了同样的问题,我为 Windows(64 位)安装了 Ghostscript 9.54.0,它解决了我的问题:
遵循以下步骤:
转到https://www.ghostscript.com/download.html单击“Postscript 和 PDF 解释器/渲染器:”下的 Ghostscript。它打开了一个新页面:https ://www.ghostscript.com/download/gsdnld.html
从页面安装了适用于 Windows(64 位)的 Ghostscript 9.54.0。
下载后安装到windows机器上。
之后重述内核并重新执行 jupyter notebook。