PHP-Imagick on OSX,ImagickException:NoDecodeDelegateForThisImageFormat` / my-path / file.jpg'@ error / construct.c / ReadImage / 550

时间:2013-07-06 08:53:29

标签: php apache2 imagemagick macports

我的环境是:MacOSX 10.8.3,PHP 5.3.17,ImageMagick 6.8.0,Apache 2.2.22

我已经使用macports安装了ImageMagick和PHP-Imagick模块。

ImageMagick按预期工作,例如我可以使用控制台命令convert /my-path/file.jpg file.gif将JPG转换为GIF。

然而,当我使用示例代码创建一个新的Imagick实例时,如下所示:

<?php
  $m = new Imagick('/my-path/file.jpg');

我得到例外:

  

NoDecodeDelegateForThisImageFormat` / my-path / file.jpg'@   误差/ constitute.c / ReadImage / 550

文件的格式不会改变结果;我测试了不同的JPG,GIF和PNG图像,但发生了同样的异常。

所以我怀疑,PHP / Apache - ImageMagick集成部分有点错误。

我看到了this post on SO并应用了给定的分辨率(添加了值为“/opt/local/lib/ImageMagick-6.8.0/modules-Q16/coders”的环境变量“MAGICKCODERMODULE_PATH”)但是没有对我的案子有意义。 (我从我的phpinfo确认了这个环境变量的存在)

我系统上某些命令的输出:

我将不胜感激。

Apache Configuration, Environment and PHPImagick Configuration

2 个答案:

答案 0 :(得分:4)

解决方案

  

chmod 755 / opt

洞察与思考

最后。我设法解决了这个问题。

由于没有关于SO的答案和建议;我并不感到意外的是,没有预料到会引起它!...

@sathia建议定义一个环境变量来调用ImageMagick二进制文件。但是在我的情况下,我需要使用phpImagick扩展并通过其API访问ImageMagick,所以这个建议没有意义。

但我想尝试一下,使用PHP的system函数调用ImageMagick的二进制转换器。在调用之后,我得到了返回值&#34; 126&#34 ;; 126表示二进制,但它不可执行!..

我检查了/ opt / local / bin / convert中的二进制文件并且它具有相应的执行权限,然后我检查了/ opt / local / bin和/ opt / local目录,它们也是可执行的。但是,/opt文件夹的权限是700!

我设法执行chmod 755 /opt并且神奇地错误已经消失。

答案 1 :(得分:1)

我也去过那里,这就是我解决它的方法:

<?php    

    define("IMAGE_MAGICK_PATH","/usr/local/bin/");
    $in = '/my-path/file.jpg';
    $out = '/my-path/file.gif';
    $convertString = IMAGE_MAGICK_PATH." convert ".$yourfile." ".$out;
    exec($convertString);

希望有所帮助