Как установить, протестировать, конвертировать, изменить размер PDF с помощью ImageMagick, Ghostscript, Windows Vista / 7 x64 - PullRequest
9 голосов
/ 14 июля 2010

У меня проблемы с совместной работой ImageMagick и Ghostscript - все кажется сложным, от установки до тестирования, и до фактического использования программного обеспечения.У кого-нибудь есть советы?

Ответы [ 2 ]

33 голосов
/ 30 ноября 2011

Последние три часа я потратил на то, чтобы 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. Проверьте установку с помощью этой строки в cmd: convert test.gif test.jpg (при условии, что у вас test.gif). Работает нормально.

Проверка преобразования PDF (convert test.pdf test.jpg). Вы должны получить (длинное) сообщение о «gswin32c.exe» и «Сбой делегата Postscript» и «отсутствует имя файла изображения». Это означает, что IM не может найти «переводчик» в формате PDF. Вам нужен Ghostscript.

Установите Ghostscript (сейчас я назову его GS). Мне пришлось сделать это дважды по какой-то причине, прежде чем это потребовалось. Добавьте адрес «bin» в папке GS в системную переменную. Проверьте установку с помощью 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.

штаны Исчерпывающий и, вероятно, элементарный, я знаю. Но, надеюсь, полезное резюме примерно из 20 страниц полуполезных подсказок.

7 голосов
/ 23 августа 2015

Стив уже предоставил руководство по запуску командной строки версии ImageMagick из PHP. После аналогичного опыта установки версии с расширением ImageMagick я бы хотел немного подробнее рассказать о том, как различные компоненты работают вместе.

Imagick (расширение PHP)

Сначала вам понадобится расширение PHP. По сути, это адаптер между PHP и функциями ImageMagick.

  • Выберите версию из http://windows.php.net/downloads/pecl/releases/imagick/
  • Загрузите расширение, соответствующее вашей версии PHP в архитектуре (вероятно, 32-битной), поточно-ориентированном и компиляторном (VC9 или VC11), см. Phpinfo
  • Скопируйте php_imagick.dll из расширения ZIP в каталог расширений PHP

Однако этого недостаточно. php_imagick.dll не содержит никаких функций ImageMagick, а библиотеки DLL CORE_RL_..., поставляемые в комплекте с расширением, не являются полными. Вам также понадобятся еще несколько DLL-файлов из релиза ImageMagick.

Теоретически версия не обязательно должна совпадать, но, очевидно, где-то между ImageMagick 6.8.1 и 6.8.8 функция MagickGetImageMatte была удалена из DLL, поэтому самый безопасный способ - найти точно такой же выпуск ImageMagick. для которого было построено расширение Imagick:

  • В проводнике Windows см. Свойства → Сведения о комплекте CORE_RL_wand_.dll, чтобы найти версию ImageMagick, для которой создано это расширение. (Вы также сможете найти эту информацию в phpinfo.)
  • Загрузите точную версию ImageMagick, например, с http://windows.php.net/downloads/pecl/deps/ (спасибо этому парню за ссылку)
  • Скопируйте все библиотеки DLL из ImageMagick ZIP в тот же каталог, где php5 (n) ts.dll (движок PHP для Apache) равен

Нет необходимости устанавливать ImageMagick. Фактически, если в вашей переменной PATH окажется несовместимый ImageMagick, расширение PHP может завершиться ошибкой.

Ghostscript

Это относится как к версии ImageMagick (convert) для командной строки, так и к описанному выше расширению PHP.

Для чтения файлов семейства Postscript необходим Ghostscript.

ImageMagick найдет Ghostscript, выполнив следующие действия:

  • Если в реестре есть запись GS_DLL, указывающая путь gswin32.dll, он будет использовать эту запись и вообще игнорировать делегатов.
  • В противном случае он будет консультироваться со своими «делегатами». Кажется, что существует жестко закодированный запасной вариант, но вы можете переопределить его, поставив delegates.xml рядом с php5(n)ts.dll или convert.exe соответственно или в ~\.magick.
  • Если он находит строку @PS_Delegate@ в делегате, он заменит ее на gswin32c.exe, а затем продолжит поиск этого EXE-файла в переменной PATH. Вы можете заменить эту строку полным путем к gswin32c.exe или даже gswin64c.exe, который должен вызывать ImageMagick.
...