ImageMagick比较没有返回任何内容到php shell_exec()

时间:2011-09-25 22:04:35

标签: php shell command-line imagemagick

我想用Image Magick比较两张图片。为此我在windows命令提示符中使用以下命令

 比较-verbose -metric mae image1.jpg image2.jpg difference.png
此命令比较image1和image2,并将结果输出打印到命令提示符窗口,并生成一个difference.jpg文件,显示两个图像之间的差异。

但是当我使用php shell_exec()运行相同的命令时,不会返回任何输出。我知道该命令正在由php执行,因为正在生成difference.jpg但该函数没有返回任何输出。类似地,当我尝试passthrough()或system()来获取输出时,再次执行命令但没有返回输出。但是当我使用像dir这样的内置系统命令时,我很容易得到输出。

任何帮助都将受到赞赏,因为我被困在这几个小时但仍然没有成功

谢谢

2 个答案:

答案 0 :(得分:2)

我解决了这个问题。奇怪的是,imagemagick与详细争论相比,并没有向正常命令promt输出发送任何内容。它将输出发送到stderr。 Stderr通常会收到错误输出。但是这里的命令是将正常输出写入stderr。

由于输出是stderr所以shell_exec()无法得到它。为了在shell_exec()中捕获它,我们必须将2>& 1附加到命令。这会将stderr重定向到正常的命令提示输出。

答案 1 :(得分:0)

ImageMagick compare命令通常不会产生任何输出。你给它两个输入文件和输出文件的名称,它会悄悄地创建输出文件。

如果出现错误,它会向stderr写入错误消息并设置非零退出状态。 (应该有办法获得退出状态,但我不知道PHP。)