我有一个非常奇怪的错误,我还没有找到解决方法。 更新 请查看下面的解决方案。
我正在尝试将全尺寸图片转换为160x120缩略图。 对于任何大小的jpg和jpeg文件都可以很好地工作,但对于png文件则不行。
ImageMagick命令:
/opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'
PHP函数(简写)
...
$cmd = "/opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'";
exec($cmd, $output, $retval);
$errors += $retval;
if ($errors > 0) {
die(print_r($output));
}
当此函数运行时,$retval等于1,这意味着转换命令失败(缩略图未创建)。
这就是有趣的地方,如果我在我的shell中运行完全相同的命令,它可以正常工作。
wedbook:~ wedix$ /opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'
wedbook:~ wedix$
我尝试使用不同的PHP函数,如system、passthru,但它们没有起作用。我想也许这里有人知道解决方法。
我正在使用:
MAMP 1.7.2
Apache/2.0.59
PHP/5.2.6
谢谢!
更新
我更新了以下依赖项:
libpng从1.2.35到1.2.37
libiconv从1.12_2到1.13_0
ImageMagick 6.5.2-4_1到6.5.2-9_0
然而,它并没有解决我的问题。
第二次更新
我终于找到了一些可能有用的东西,当函数运行时,这就是在Apache日志中打印出来的内容:
dyld: Library not loaded: /opt/local/lib/libiconv.2.dylib
Referenced from: /opt/local/bin/convert
Reason: Incompatible library version: convert requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0
第三次更新
libiconv.2.dylib版本为8.0.0...
bash-3.2$ otool -L /opt/local/lib/libiconv.2.dylib
/opt/local/lib/libiconv.2.dylib:
/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
第四次更新
问题与MAMP相关,解决方法如下:
exec("convert logo: logo.gif")
,它可以正常工作...然而,一个更复杂的转换在shell中可以工作但在exec()中不行:/opt/local/bin/convert -size 758x185 /Applications/MAMP/htdocs/recetas/img/photo/old.tmp -crop 470x185+142+0! -quality 100 +profile "*" /Applications/MAMP/htdocs/recetas/img/photo/new.jpg
...我正在创建logo.gif,它与old.tmp在同一个目录下,所以这不是路径的问题(此外,如果我在bash或sh中复制/粘贴命令,它可以正常工作)。在apache中出现的错误(没有php错误)是sh: command_here: No such file or directory
。 - mgaescapeshellarg()
函数对路径做了某些处理,导致ImageMagick无法工作。我以前从未使用过它,但在php.net上看到它被推荐,所以就用了它,结果浪费了三天时间来调试这个该死的东西... 哎,算了。 - mga