我的环境是: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确认了这个环境变量的存在)
我系统上某些命令的输出:
我将不胜感激。
答案 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);
希望有所帮助