Проблема с Imagick, а также с phmagick: делегат Postscript не удалось / нет такого файла или каталога

Я использую imagick 3.0.1, а также phmagick (http://www.francodacosta.com/phMagick/download). Независимо от того, что, оба дают мне такую же ошибку, когда я пытаюсь преобразовать PDF в JPEG.

например: делегат Postscript не удалось "/tmp/magick-bfxIrUJ5": нет такого файла или каталога @ error / pdf.c / ReadPDFImage / 669

Я использую Ghostcript-9.05 (работает на /usr/local/bin/gs). Также ImageMagick-6.7.6-8 (работает на / usr / local/bin / convert).

Я уже проверил разрешение папки (755). ImageMagick прекрасно работает от терминала.

например, мой PHP с помощью Imagick:

//use imagick
$im = new imagick( '/pdf/553571072.pdf' );

// convert to jpg
$im->setImageColorspace(255);
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setImageFormat('jpeg');

//write image on server
$im->writeImage('/jpg/553571072.jpg');

кстати, Imagick он появляется в моем phpinfo (). Я работаю над linux / apache / amd64.

любой совет будет высоко оценен!

3 ответов


хорошо, это, наконец, работает, благодаря помощи Нуно Франко Да Коста (http://www.francodacosta.com/).

проблема заключалась в том, что мой путь GhostScript был в порядке для оболочки, но он был неправильным для системы и PHP. Чтобы исправить это, вы должны связать ваш до /usr/bin/gs.

сделайте следующее из оболочки:

[root@din ~]# convert -list configure | grep -i delegates
DELEGATES     bzlib fontconfig freetype jpeg jng png tiff x11 xml zlib

проверьте, если gs файл уже существует в /usr/bin. Если это произойдет, мы создайте резервную копию.
если нет /usr/bin/gs вы можете пропустить этот шаг

[root@din ~]# ls -l /usr/bin/gs
-rwxr-xr-x 1 root root 6024 Sep 30  2010 /usr/bin/gs
[root@din ~]# mv /usr/bin/gs /usr/bin/gs.orig

Теперь создайте ссылку из /usr/local/bin/gs to /usr/bin/gs

[root@din ~]# sudo ln -s /usr/local/bin/gs /usr/bin

это должно решить проблему. Спасибо большое ребята.


мой вклад в "чистое решение PHP", предложенное @HelloWorld (спасибо!) в комментариях принятого ответа небольшая поправка: надо добавить имя переменной перед расширением пути по умолчанию, so
putenv( getenv('PATH') . ':/usr/local/bin' ); не работает
putenv( 'PATH=' . getenv('PATH') . ':/usr/local/bin' ); будет

*у меня меньше 50 очков репутации, я не мог добавить свой комментарий в нужном месте, поэтому мне пришлось создать новый ответ: -)


Я получал эти проблемы, используя ImageMagick ImageMagick 6.7.7-10 С GhostScript 9.10.

оказывается, PDF-файлы были повреждены, и хотя некоторые новые версии GS могли их прочитать, эта более старая версия не могла, учитывая следующую ошибку.

   **** Warning:  An error occurred while reading an XREF table.
   **** The file has been damaged.  This may have been caused
   **** by a problem while converting or transfering the file.
   **** Ghostscript will attempt to recover the data.

под Linux, вы можете передать PDF через pdftk первый:

pdftk 'bad.pdf' output 'fixed.pdf'

после этого все работало для меня на Ubuntu.