2012-05-04 15 views
7

Estoy usando imagick 3.0.1 y también phmagick (http://www.francodacosta.com/phMagick/download). No importa qué, ambos me están dando el mismo tipo de error cuando intento convertir un PDF a JPEG.Problema con Imagick y también con phmagick: el delegado de PostScript falló/No existe dicho archivo o directorio

Por ejemplo: delegado PostScript fallidos `/ tmp/magia-bfxIrUJ5' : No existe el error de archivo o directorio @/pdf.c/ReadPDFImage/669

estoy usando Ghostcript-9,05 (que se ejecuta en/usr/local/bin/gs). También ImageMagick-6.7.6-8 (ejecutándose en/usr/local/bin/convert).

Ya he comprobado el permiso de la carpeta (755). ImageMagick funciona de maravilla desde la Terminal.

Por ejemplo, mi PHP usando 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'); 

Por cierto Imagick se aparece en mi phpinfo(). Estoy trabajando en linux/apache/amd64.

Cualquier consejo será muy apreciado!

+0

funcionando bien desde el terminal es irrelevante. No se está ejecutando bajo el UID de Apache, entonces no es una prueba válida. –

+0

¿Su muestra de código es de una aplicación web, o desde la línea de comandos? ¿Y realmente está leyendo desde la carpeta '/ pdf' y escribiendo en la carpeta '/ jpg', es decir, ambos están en la raíz del sistema de archivo? – halfer

+0

Halfer, el código es de una aplicación web, intenté también usar la ruta completa '/var/vhost/...../pdf/', lo mismo para jpg. Las carpetas están en la base, lo mismo que/css y/js. Mark, no entiendo tu punto, estoy ejecutando una aplicación web en un VPS. Gracias chicos. – 82din

Respuesta

16

OK, esto finalmente funciona, gracias a la ayuda de Nuno Franco da Costa (http://www.francodacosta.com/).

El problema era que mi ruta de GhostScript estaba bien para el Shell, pero era incorrecta para el sistema y PHP. Para corregir eso, debe vincular su archivo /usr/local/bin/gs al /usr/bin/gs.

hacer lo siguiente desde el Shell:

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

Compruebe si un archivo gs ya existe en /usr/bin. Si lo hace, crearemos una copia de seguridad de la misma.
Si no hay /usr/bin/gs puede omitir este paso

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

Ahora crea el enlace desde /usr/local/bin/gs a /usr/bin/gs

[[email protected] ~]# sudo ln -s /usr/local/bin/gs /usr/bin 

Eso debería resolver el problema. Muchas gracias chicos.

+0

Eso me soluciona el problema también ... ¿pero no es posible especificar a php-imagick dónde está el ejecutable gs? –

+3

Acabo de recibir esta respuesta. Existe una solución simple. Simplemente agregue la ruta real de 'gs' al php RUTA: putenv (getenv ('RUTA'). ':/Usr/local/bin') – HelloWorld

4

Mi contribución a la "solución pura de PHP" propuesta por @HelloWorld (¡gracias!) en los comentarios de la respuesta aceptada, una pequeña corrección: hay que añadir el nombre de la variable antes de extender la ruta predeterminada, por lo
putenv( getenv('PATH') . ':/usr/local/bin'); no va a funcionar, pero
putenv('PATH=' . getenv('PATH') . ':/usr/local/bin'); se

* I tener menos de 50 puntos de reputación, no podía añadir mi comentario en el lugar correcto, así que tuve que crear una nueva respuesta :-)

1

que estaba recibiendo estos problemas utilizando ImageMagickImageMagick 6.7.7-10 wi th GhostScript9.10.

Resulta que los PDF estaban dañados, y aunque algunas versiones GS más nuevas podían leerlos, esta versión anterior no pudo, dado el siguiente 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. 

En Linux, puede pasar los archivos PDF a través pdftk primera:

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

Después de eso, todo lo que funcionó para mí en Ubuntu.

Cuestiones relacionadas