我正在使用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');
顺便说一句,Imagick会出现在我的phpinfo()中。我正在使用linux / apache / amd64。
任何建议都将受到高度赞赏!
答案 0 :(得分:16)
好的,这要归功于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
那应该解决问题。非常感谢你们。
答案 1 :(得分:5)
我对@HelloWorld (谢谢!)在接受的答案的评论中提出的“纯PHP解决方案”做出了贡献,稍加纠正:必须添加变量名< / b>在扩展默认PATH之前,所以
putenv( getenv('PATH') . ':/usr/local/bin' );
不起作用,但是
putenv( 'PATH=' . getenv('PATH') . ':/usr/local/bin' );
将
*我的声誉不到50分,无法在正确的地方添加我的评论,所以我不得不创建一个新答案: - )
答案 2 :(得分:1)
我使用 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下,您可以先通过 pdftk 传递PDF:
pdftk 'bad.pdf' output 'fixed.pdf'
之后,Ubuntu上的一切都对我有用。