Imagick以及phmagick的问题:Postscript委托失败/没有这样的文件或目录

Die*_*nto 8 php pdf imagemagick ghostscript imagick

我正在使用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在Terminal工作得很好.

例如,我的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');
Run Code Online (Sandbox Code Playgroud)

顺便说一下,Imagick它出现在我的phpinfo()中.我正在使用linux/apache/amd64.

任何建议将受到高度赞赏!

Die*_*nto 17

好的,这要归功于Nuno Franco da Costa(http://www.francodacosta.com/)的帮助.

问题是我的GhostScript路径对于Shell来说是好的,但它对系统和PHP来说是错误的.要更正您应该将/usr/local/bin/gs文件链接到/usr/bin/gs.

从Shell执行以下操作:

[root@din ~]# convert -list configure | grep -i delegates
DELEGATES     bzlib fontconfig freetype jpeg jng png tiff x11 xml zlib
Run Code Online (Sandbox Code Playgroud)

检查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
Run Code Online (Sandbox Code Playgroud)

现在创建链接/usr/local/bin/gs/usr/bin/gs

[root@din ~]# sudo ln -s /usr/local/bin/gs /usr/bin
Run Code Online (Sandbox Code Playgroud)

那应该可以解决问题.非常感谢你们.

  • 我刚刚通过这个答案.有一个简单的解决方案.只需将'gs'的实际路径添加到php PATH:putenv(getenv('PATH').':/ usr/local/bin') (3认同)

小智 5

我对@HelloWorld提出的"纯PHP解决方案" (谢谢!)的贡献在接受的答案的评论中做了一点修正:必须在扩展默认PATH之前添加变量名,这样
putenv( getenv('PATH') . ':/usr/local/bin' );就行不通了,但是
putenv( 'PATH=' . getenv('PATH') . ':/usr/local/bin' );

*我的声誉不到50分,无法在正确的地方添加我的评论,所以我不得不创建一个新答案:-)