【问题标题】:ImageMagick compare not returning anything to php shell_exec()ImageMagick 比较不返回任何内容到 php shell_exec()
【发布时间】:2011-11-24 19:46:57
【问题描述】:

我想使用 Image Magick 比较两个图像。为此,我在 Windows 命令提示符中使用以下命令

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

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

任何帮助将不胜感激,因为我被困了几个小时但仍然没有成功

谢谢

【问题讨论】:

  • 到目前为止你有什么?
  • 什么都没有。它不返回任何东西
  • 你怎么称呼它?命令是什么?
  • $output=shell_exec("compare -verbose -metric mae image1.jpg image2.jpg difference.png");echo $output;命令在创建差异图像时执行,但函数不返回任何输出
  • 如果你在php文件所在的文件夹下运行这个命令,你会得到什么?

标签: php shell command-line imagemagick


【解决方案1】:

我解决了这个问题。奇怪的是,imagemagick 与冗长的争论相比并没有向正常的命令提示符输出发送任何内容。它将输出发送到 stderr。 Stderr 通常接收错误输出。但是这里这个命令正在将正常输出写入标准错误。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 但是,如果您将 -verbose 参数传递给 imagemagick,它除了生成输出图像文件外,还会生成文本输出。尽管我在命令中运行命令,但我无法通过 shell_exec() 获得该输出提示我可以看到输出了。
    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2013-10-22
    • 1970-01-01
    • 2016-12-02
    • 2021-07-07
    相关资源
    最近更新 更多