Imagemagick 无法读取文件(MAMP)

Posted

技术标签:

【中文标题】Imagemagick 无法读取文件(MAMP)【英文标题】:Imagemagick unable to read the file (MAMP ) 【发布时间】:2014-08-19 22:46:22 【问题描述】:

我已经在我的 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 主要 在第 8 行的 /Applications/MAMP/htdocs/image/index.php 中抛出

源代码:

$pdf_file = '/Applications/MAMP/htdocs/image/demo.pdf'; 回声 $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);

编辑 1:

我正在使用brew 来管理包。

我的 MAMP 配置:

Imagick 扩展(php.ini):

[想象] 扩展="/usr/local/Cellar/php55-imagick/3.1.0RC2/imagick.so"

环境变量:

路径:

/Applications/MAMP/Library/bin/envvars

内容:

#if test "x$DYLD_LIBRARY_PATH" != "x" ;然后 # DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" #别的 #DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib" #fi #export DYLD_LIBRARY_PATH #DYLD_LIBRARY_PATH="/Applications/MAMP/bin/ImageMagick/ImageMagick-6.8.9/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" #export DYLD_LIBRARY_PATH

【问题讨论】:

您确定此文件存在(路径正确)吗?您是否尝试将不是 PDF 而是图像传递给构造函数?有没有错误?您也很可能需要使用$img = new imagick(realpath($pdf_file)); 或者您没有安装 ghostscript 库 也可以试试相对路径 ($_SERVER['DOCUMENT_ROOT'] . '/image/demo.pdf')。 @MarcinNabiałek 我检查了路径,它是正确的。我不确定ghostscript。但是,我可以通过命令行转换图像。 @Anam 你的意思是你可以把这个pdf转换成jpg?在 PHP 手册中有 For example, Imagemagick requires ghostscript to conduct PDF operations. 所以你应该确保你已经安装了 ghostscript @MarcinNabiałek,我可以从命令行转换 pdf。因此,Ghostscript 已安装。 【参考方案1】:

首先检查您的 pdf 文件路径:

if (! is_readable('/Applications/MAMP/htdocs/image/demo.pdf')) 
    echo 'file not readable';
    exit();

如果文件可读,请检查:https://github.com/delphian/drupal-convert-file/wiki/Installing-ImageMagick-on-Mac-OSX-for-PHP-and-MAMP

【讨论】:

你的答案是正确的,+1。不要忘记提及路径必须是本地系统路径。当上述函数命中echo 时,imagick 将永远无法工作。 文件是可读的,我遵循了许多教程,包括您提供的链接。我可以从命令行将 pdf 转换为图像,但不能使用 php 扩展。 最后一次尝试:有多个 pdf 规范(版本)。也许您可以尝试找出 demo.pdf 的当前 pdf 版本并将其转换为其他版本。您是否尝试过除 demo.pdf 之外的其他文件?【参考方案2】:

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

显然,当使用 pdf 文件时,我们可以指定使用哪个页面,这反过来可以帮助 imageMagick 在使用 pdf 文件时正确构造

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

【讨论】:

以上是关于Imagemagick 无法读取文件(MAMP)的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Mac 上更改 mamp 端口

MAC MAMP 中安装配置使用 ThinkPHP

cookies / MAMP / CodeIgniter的问题

读取Python中imagemagick子进程的输出[复制]

从Python中的imagemagick子进程读取输出[重复]

无法在 MAMP 3.5.2 上启动 mySql