Imagemagick无法读取该文件(MAMP)

6
我在我的MAMP开发环境中安装了Imagemagick扩展,并且PHP信息显示Imagemagick已经正确安装。然而,我收到以下异常:
PHP致命错误:抛出未捕获的异常'ImagickException',消息为“无法读取文件:/Applications/MAMP/htdocs/image/demo.pdf”,位于/Applications/MAMP/htdocs/image/index.php的第8行。 堆栈跟踪: #0 /Applications/MAMP/htdocs/image/index.php(8):Imagick->__construct('/Applications/M...') #1 {main} 在/Applications/MAMP/htdocs/image/index.php的第8行抛出
源代码: $pdf_file ='/Applications/MAMP/htdocs/image/demo.pdf';
echo $pdf_file; $save_to ='/Applications/MAMP/htdocs/image/demo.jpg'; $img = new imagick($pdf_file);
//减小尺寸-缩放会导致透明区域变黑 $img->scaleImage(800,0);
//设置新格式 $img->setImageFormat('jpg');
//保存图像文件 $img->writeImages($save_to, false);
图片如下所示:https://istack.dev59.com/SdFCQ.webp 编辑1:
我使用brew来管理软件包。
我的MAMP配置:
Imagick扩展(php.ini):
[imagick] extension="/usr/local/Cellar/php55-imagick/3.1.0RC2/imagick.so"
Envvars:
路径:
/Applications/MAMP/Library/bin/envvars

内容:

如果测试"x $ DYLD_LIBRARY_PATH"!= "x",那么
DYLD_LIBRARY_PATH ="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
否则
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib"
fi
导出DYLD_LIBRARY_PATH
DYLD_LIBRARY_PATH="/Applications/MAMP/bin/ImageMagick/ImageMagick-6.8.9/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 导出DYLD_LIBRARY_PATH

你确定这个文件存在(路径正确吗)?你尝试过传递给构造函数的不是PDF而是图像吗?有出现任何错误吗?很可能你需要使用 $img = new imagick(realpath($pdf_file)); 或者你没有安装ghostscript库。 - Marcin Nabiałek
@MarcinNabiałek 我已经检查了路径,它是正确的。我不确定ghostscript是否可用。但是,我可以通过命令行转换图像。 - Anam
@Anam 你的意思是你可以将这个pdf转换成jpg吗?在PHP手册中有这样一句话:“例如,Imagemagick需要ghostscript来进行PDF操作。”所以你应该确保已经安装了ghostscript。 - Marcin Nabiałek
@GuyT,我正在使用完整的本地路径。 - Anam
1
@MarcinNabiałek,我可以通过命令行转换PDF。因此,Ghostscript已安装。 - Anam
显示剩余2条评论
2个回答

5

1
你的答案是正确的,+1。不要忘记提到路径必须是本地系统路径。当上述函数遇到echo时,imagick将无法工作。 - GuyT
文件可读,我已经按照许多教程进行了操作,包括您提供的链接。我可以通过命令行将PDF转换为图像,但无法使用PHP扩展程序。 - Anam
最后一次尝试:存在多个PDF规范(版本)。也许您可以尝试找出demo.pdf的当前PDF版本并将其转换为其他版本。您是否尝试过除demo.pdf之外的其他文件? - Kevin

1

来自http://www.php.net/manual/zh/imagick.construct.php

显然,当使用PDF文件时,我们可以指定要使用哪一页,这可能有助于在使用PDF文件时正确构建imageMagick。

$pdf_file   = '/Applications/MAMP/htdocs/image/demo.pdf';
$img = new Imagick($pdf_file.'[0]'); 
//[0] indicate the number of the wanted page

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接