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

Ben*_*Ben 10 pdf 64-bit imagemagick ghostscript

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

Ben*_*Ben 36

我刚刚花了最后三个小时让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;
Run Code Online (Sandbox Code Playgroud)

2>&1 会将所有的错误到标准输出,因此您可以更好地诊断东西:).现在,您的PHP脚本可以在cmd提示符下运行,但在浏览器中运行它时没有任何反应.砸你的额头,重新启动Apache.

我知道,裤子穷尽,可能是小学的.但是对大约20页的半帮助线索的希望有用的总结.


And*_*eKR 7

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版本,例如来自http://windows.php.net/downloads/pecl/deps/(感谢这个人的链接)
  • 将所有DLL从ImageMagick ZIP复制到php5(n)ts.dll(Apache的PHP引擎)所在的同一目录

没有必要安装 ImageMagick.实际上,如果您的PATH中碰巧出现了不兼容的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然后继续在PATH中查找该EXE.您可以使用完整路径替换此字符串,gswin32c.exe甚至gswin64c.exe可以调用ImageMagick.