Issue with Imagick and also with phmagick: Postscript delegate failed / No such file or directory

18,287

Solution 1

OK, this finally works, thanks to the help of Nuno Franco da Costa (http://www.francodacosta.com/).

The problem was that my GhostScript path was OK for the Shell, but it was wrong for the System and PHP. To correct that you should link your /usr/local/bin/gs file to /usr/bin/gs.

Do the following from the Shell:

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

Check to see if a gs file already exists in /usr/bin. If it does, we'll create a backup of it.
If there is no /usr/bin/gs you can skip this step

[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

Now create the link from /usr/local/bin/gs to /usr/bin/gs

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

That should solve the problem. Thanks a lot guys.

Solution 2

My contribute to the "pure PHP solution" proposed by @HelloWorld (thank you!) in the comments of the accepted answer, a little correction: one must add the variable name before extending the default PATH, so
putenv( getenv('PATH') . ':/usr/local/bin' ); won't work, but
putenv( 'PATH=' . getenv('PATH') . ':/usr/local/bin' ); will

*I have less than 50 points of reputation, couldn't add my comment at the right place, so i had to create a new answer :-)

Solution 3

I was getting these problems using ImageMagick ImageMagick 6.7.7-10 with GhostScript 9.10.

It turns out the PDF's were corrupted, and though some newer GS versions could read them, this older version could not, given the following error.

   **** 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.

Under Linux, you can pass the PDF's through pdftk first:

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

After that, everything worked for me on Ubuntu.

Share:
18,287
Diego Sarmiento
Author by

Diego Sarmiento

Skilled professional with more than +10 years of experience in the finance, health care and hospitality industry. Highly developed skills on Software Architecture (Angular) to support high-performance and scalable products. Focus on agile methodologies with small and medium size teams, pixel-perfect development, responsive design and easy-to-maintain Front-End development. Excellent team player with demonstrated experience as a leader. Active collaborator with all levels of staff and management to exceed customer expectations and revenue goals. Passionate about product development and constant innovation. Entrepreneurial spirit and heavy international experience with enterprise projects, startups and multi-cultural teams. Specialties: Angular 8+, Automation (Protractor), Unit Tests (Karma), Front-End Architecture, Node, Jenkins, Splunk, UX Design, rapid prototyping

Updated on July 29, 2022

Comments

  • Diego Sarmiento
    Diego Sarmiento almost 2 years

    I'm using imagick 3.0.1 and also phmagick (http://www.francodacosta.com/phMagick/download). No matter what, both are giving me the same kind of error when I try to convert a PDF to JPEG.

    For example: Postscript delegate failed `/tmp/magick-bfxIrUJ5': No such file or directory @ error/pdf.c/ReadPDFImage/669

    I'm using Ghostcript-9.05 (running on /usr/local/bin/gs). Also ImageMagick-6.7.6-8 (running on /usr/local/bin/convert).

    I already checked folder's permission (755). ImageMagick works wonderful from Terminal.

    For example, my PHP using 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');
    

    By the way Imagick it's showing up in my phpinfo(). I'm working on linux/apache/amd64.

    Any advice will be highly appreciated!

  • Arnold Roa
    Arnold Roa almost 11 years
    That solves the problem for me also... but is not possible to specify to php-imagick where the gs executable is?
  • HelloWorld
    HelloWorld over 10 years
    I just came through this answer. There is a simple solution. Just add the actual path of 'gs' to the php PATH: putenv(getenv('PATH').':/usr/local/bin')