ImageMagick compare不向php shell_exec()返回任何内容

ImageMagick compare不向php shell_exec()返回任何内容,php,shell,command-line,imagemagick,Php,Shell,Command Line,Imagemagick,我想用ImageMagick比较两幅图像。为此,我在windows命令提示符中使用以下命令 比较-详细-公制mae图像1.jpg图像2.jpg差异.png 此命令比较image1和image2,并将结果输出打印到命令提示符窗口,并生成一个difference.jpg文件,显示两个图像之间的差异 但当我使用php shell_exec()运行相同的命令时,不会返回任何输出。我知道php在生成difference.jpg时正在执行该命令,但函数没有返回任何输出。类似地,当我尝试passthroug

我想用ImageMagick比较两幅图像。为此,我在windows命令提示符中使用以下命令

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

但当我使用php shell_exec()运行相同的命令时,不会返回任何输出。我知道php在生成difference.jpg时正在执行该命令,但函数没有返回任何输出。类似地,当我尝试passthrough()或system()获取输出时,同样会执行命令,但不会返回任何输出。但是当我使用诸如dir之类的内置系统命令时,我可以轻松获取输出

任何帮助都将不胜感激,因为我在这个问题上纠缠了几个小时,但仍然没有成功

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


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

我解决了这个问题。奇怪的是,imagemagick compare和verbose参数并没有向正常的命令promt输出发送任何内容。它将输出发送到stderr。Stderr通常接收错误输出。但在这里,这个命令将正常输出写入stderr

由于输出将发送到stderr,因此shell_exec()无法获取它。为了在shell_exec()中捕获它,我们必须在命令中附加2>&1。这将把stderr重定向到正常的命令提示符输出。

到目前为止,您有什么?没有。它不会返回任何东西你怎么称呼它?命令是什么?$output=shell_exec(“compare-verbose-metric-mae-image1.jpg-image2.jpg-difference.png”);echo$输出;命令在创建差异图像时执行,但函数不返回任何输出。如果您在与php文件相同的文件夹中运行此命令,您会得到什么?但如果您将-verbose参数传递给imagemagick,它将以文本形式生成输出图像文件。我无法通过shell_exec()获得该输出尽管我在命令提示符下运行该命令,但仍然可以看到输出。