8

我正在使用 imagick 3.0.1 和 phmagick (http://www.francodacosta.com/phMagick/download)。无论如何,当我尝试将 PDF 转换为 JPEG 时,两者都会给我同样的错误。

例如: Postscript delegate failed `/tmp/magick-bfxIrUJ5': No such file or directory @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。

任何建议将不胜感激!

4

3 回答 3

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

检查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到的链接/usr/bin/gs

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

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

于 2012-05-07T20:30:05.590 回答
5

我对@HelloWorld (谢谢!)在已接受答案的评论中提出的“纯 PHP 解决方案”做出了贡献,稍作更正:必须在扩展默认 PATH 之前添加变量名
putenv( getenv('PATH') . ':/usr/local/bin' );,因此不起作用,但
putenv( 'PATH=' . getenv('PATH') . ':/usr/local/bin' );

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

于 2015-12-22T13:17:06.060 回答
1

我在使用ImageMagick ImageMagick 6.7.7-10GhostScript 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 下,您可以先通过pdftk传递 PDF :

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

之后,一切都在 Ubuntu 上为我工作。

于 2017-01-16T02:55:12.557 回答