How to install, test, convert, resize PDF using ImageMagick, Ghostscript, Windows Vista/7 x64

北战南征 提交于 2020-01-09 09:54:09

问题


I'm having trouble with getting ImageMagick and Ghostscript to work together - everything seems difficult, from installation, to testing, to actually using the software. Does anyone have any tips?


回答1:


I've just spent the last three hours getting ImageMagick to play nicely with PHP for a PDF to JPG convert. Instead of documenting it myself locally, I figured I'd write it up here, with all the buzzwords and things I screwed up, so the next noob can save some time.

Tested on two OSs,Windows 7 x64 and Vista x64, with PHP 5.2.8 and Apache 2.2.11.

You'll need Ghostscript and ImageMagick. I got gs871w64.exe and ImageMagick-6.6.3-0-Q16-windows-x64-dll.exe.

Do a basic install of ImageMagick (I'll call it IM now). Double check the system path variable to ensure you can IM from anywhere. It should point to the IM directory. Test the installation with this line in cmd: convert test.gif test.jpg (assuming you have test.gif). Works OK.

Test a PDF convert (convert test.pdf test.jpg). You should get a (long) message about "gswin32c.exe" and "Postscript delegate failed" and "missing an image filename". That means IM can't find a PDF 'translator'. You need Ghostscript.

Install Ghostscript (I'll call it GS now). I had to do it twice for some reason before it took. Add the 'bin' address in the GS folder to the system variable. Test the installation with gswin32 test.pdf and you should see your file pop up in the GS viewer. Important note: gs doesn't work in Windows ('gs' is not recognized as an internal or external command, operable program, or batch file.). You need to use gswin32.

Back to the IM test: convert test.pdf test.jpg should work now.

Now over to PHP - write up this script:

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

The 2>&1 will move all errors into the standard output so you can better diagnose stuff :). Now, your PHP script may run in the cmd prompt, but nothing happens when you run it in a browser. Smack your forehead and restart Apache.

pant Exhaustive and probably elementary, I know. But a hopefully helpful summary of approximately 20 pages of semi-helpful clues.




回答2:


Steve already provided a guide on running the command line version of ImageMagick from PHP. After having a similar experience installing the extension version of ImageMagick, I'd like to elaborate a bit on how the different components work together.

Imagick (the PHP extension)

First you'll need the PHP extension. It's basically an adapter between PHP and the ImageMagick functions.

  • Choose a version from http://windows.php.net/downloads/pecl/releases/imagick/
  • Download the extension matching your PHP version in architecture (probably 32bit), thread-safe-ness and compiler (VC9 or VC11), see phpinfo
  • Copy php_imagick.dll from the extension ZIP to the PHP extension directory

However, this is not enough. The php_imagick.dll does not contain any ImageMagick functionality and the CORE_RL_... DLLs that come bundled with the extension are not complete. You're gonna need some more DLLs from an ImageMagick release as well.

Theoretically the version doesn't have to match exactly, but apparently somewhere between ImageMagick 6.8.1 and 6.8.8 the function MagickGetImageMatte has been removed from the DLLs, so the safest way is to find the exact same ImageMagick release that the Imagick extension was build for:

  • In Windows Explorer, see Properties → Details of the bundled CORE_RL_wand_.dll to find the version of ImageMagick that this extension is made for. (You should also be able to find this information in phpinfo.)
  • Download that exact ImageMagick version, for example from http://windows.php.net/downloads/pecl/deps/ (thanks to this guy for the link)
  • Copy all the DLLs from the ImageMagick ZIP to the same directory where php5(n)ts.dll (the PHP engine for Apache) is

It is not necessary to install ImageMagick. In fact, if you happen to have an incompatible ImageMagick in your PATH, the PHP extension might fail.

Ghostscript

This applies to both the command line version of ImageMagick (convert) and the PHP extension described above.

For reading files of the Postscript family, Ghostscript is needed.

ImageMagick will find Ghostscript following these steps:

  • If there is a GS_DLL entry in the registry, pointing to the path of gswin32.dll, it will use that one and ignore the delegates altogether.
  • Otherwise it will consult it's "delegates". There seems to be a hardcoded fallback, but you can override it by putting a delegates.xml next to php5(n)ts.dll or convert.exe respectively or in ~\.magick.
  • If it finds the string @PS_Delegate@ in the delegate, it will replace it with gswin32c.exe and then continue looking for that EXE in the PATH. You can replace this string with the full path to gswin32c.exe or even gswin64c.exe that ImageMagick should call.


来源:https://stackoverflow.com/questions/3243361/how-to-install-test-convert-resize-pdf-using-imagemagick-ghostscript-window

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!