如何使用ImageMagick、Ghostscript和Windows Vista/7 x64安装、测试、转换、调整PDF大小

14

我在使用ImageMagick和Ghostscript时遇到了一些麻烦 - 从安装、测试到实际使用这个软件都很困难。有没有人有什么建议?


1
谢谢,这是一个不错的评论。我需要注意哪些权限问题吗?我正在运行WAMP,但当我的脚本运行时,什么也没有显示。从Windows命令提示符中运行很好。似乎它不通过Apache运行。 - Brian Seim at EvoDynamic Inc
嗯,您想把它作为一个单独的问题/答案,而不是把所有内容都放在问题中吗?谢谢。 - slhck
好的。这实际上是我在SO上的第一次贡献,不知道事情是如何运作的,但这是个好主意。 :) - Ben
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 delegate failed”和“missing an image filename”的(长)消息。这意味着IM找不到PDF“翻译器”。你需要Ghostscript。

安装Ghostscript(我将其称为GS)。由于某种原因,我必须做两次才能成功。将GS文件夹中的“bin”地址添加到系统变量中。使用gswin32 test.pdf测试安装,您应该可以在GS查看器中看到您的文件弹出。重要提示:在Windows中 gs不起作用'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页半有用线索的希望有益的总结。

将Windows上的转换命令用于将格式类型从普通转换为NTFS。可以使用Magick Convert代替,但它会出现错误“magick不是已知的命令”,我已经使其正常工作并在路径中了。谢谢 - MindRoasterMir

11

Steve已提供了如何从PHP运行ImageMagick的命令行版本的指南。在安装ImageMagick的扩展版本时,我想详细解释一下这些不同组件是如何共同工作的。

Imagick(PHP扩展)

首先,您需要安装PHP扩展。它基本上是PHP和ImageMagick功能之间的适配器。

然而,这还不够。 php_imagick.dll不包含任何ImageMagick功能,扩展捆绑的CORE_RL_... DLL也不完整。您还需要从ImageMagick发行版中获取更多DLL。

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

  • 在Windows资源管理器中,查看捆绑的CORE_RL_wand_.dll的属性→详细信息,以查找此扩展程序所制作的ImageMagick版本。(您还应该能够在phpinfo中找到此信息。)
  • 此处下载确切的ImageMagick版本(感谢此人提供的链接)。
  • 将ImageMagick ZIP中的所有DLL复制到php5(n)ts.dll所在的目录中,即PHP引擎所在的目录。
  • 不需要安装 ImageMagick。实际上,如果路径中有不兼容的ImageMagick,则PHP扩展可能会失败。

    Ghostscript

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

    读取Postscript文件族的文件需要 Ghostscript。

    ImageMagick将按以下步骤查找Ghostscript:

    • 如果注册表中有GS_DLL条目,指向gswin32.dll的路径,则它将使用该条目并完全忽略委托。
    • 否则,它将查找其“委托”。似乎有一个硬编码的回退,但是您可以通过将delegates.xml放置在php5(n)ts.dllconvert.exe旁边或在~\.magick中来覆盖它。
    • 如果在委托中找到字符串@PS_Delegate@,则会将其替换为gswin32c.exe,然后继续查找该EXE是否在PATH中。您可以使用gswin32c.exe或甚至是 ImageMagick 应调用的 gswin64c.exe 的完整路径替换此字符串。

    我在Windows中将C:\ghostscript\bin\添加到了我的PATH变量中,但是当我调用readImageFile(...)时仍然出现了Uncaught exception 'ImagickException' with message 'NoDecodeDelegateForThisImageFormat的异常。 - user3383675

    1
    我遇到了同样的问题,我安装了Ghostscript 9.54.0 for Windows (64 bit)解决了我的问题:
    按照以下步骤操作:
    1. 访问https://www.ghostscript.com/download.html,在“Postscript和PDF解释器/渲染器”下找到Ghostscript并单击。这将打开一个新页面: https://www.ghostscript.com/download/gsdnld.html

    2. 从该页面上安装Ghostscript 9.54.0 for Windows (64 bit)。

    3. 下载完成后,在Windows机器上安装它。

    之后重新启动内核并重新执行jupyter笔记本。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接