【问题标题】:Can't run PHP exec command for ImageMagick within for loop无法在 for 循环中为 ImageMagick 运行 PHP exec 命令
【发布时间】:2019-10-30 04:57:51
【问题描述】:

我需要编写 PHP 脚本来调用我安装在我的服务器(Windows server 2008 r2 和 Apache 服务器)上的 ImageMagick 软件,将一组 TIFF 格式的图像转换为 JPEG 格式。

我已经尝试使用 ImageMagick convert 命令对单个图像执行 exec() 并且它有效,但是当我将 exec() 放入 for 循环以遍历一组图像时,PHP 脚本似乎永远运行,直到服务器超时停止它。

$dir = "C:\\Apache24\htdocs\AutoRep\\img\\A101";
$files1 = scandir($dir);
$countarray = count($files1);
for ($x = 0; $x < $countarray; $x++){
  if (preg_match("/new/i", $files1[$x]) && preg_match("/VOP/i", $files1[$x])){
    $file_name = substr($files1[$x],0,-4); // to remove .tif from file name
    $command = "magick convert C:\Apache24\htdocs\AutoRep\\img\\A101\\$file_name.tif C:\Apache24\htdocs\AutoRep\\img\\A101\\$file_name.jpg";
    exec($command);
  }
}

我希望脚本会将图像组从 TIFF 转换为 JPEG 格式。

【问题讨论】:

  • scandir() 将返回... 如果in_array($files1[$x], ['.','..']); 则应返回continue
  • @zanderwar 他们已经不匹配已经存在的 preg_match,因为 ... 不包含“新”或“VOP”
  • 你得到任何转换的图像吗?不要忘记转义所有反斜杠。你现在只能逃脱一些。
  • 为每个在 exec() 命令中调用 Imagemagick convert 的图像编写一个 PHP 循环。或者使用 PHP Imagick 和 PHP 循环。
  • 您几乎从不想使用magick 后跟convert。仅在 v7 中使用 magick,在 v6 中仅使用 convert

标签: php imagemagick


【解决方案1】:

我会将您的输入和输出字符串放入一个变量中,以便您可以回显它们以查看它们是否包含您期望的内容。

为什么要删除 .tif 然后再添加回来?

你不需要用魔法转换。

在 Windows 上,我总是将文件路径放在 " " 中以包含它。

我不确定您是否需要转义 \ 但回显您的变量应该可以证明这一点。

尝试通过将其写入代码来添加一些错误报告:

$array=array();
echo "<pre>";
exec("magick Input Output 2>&1", $array); // Your Imagemagick command
echo "<br>".print_r($array)."<br>"; 
echo "</pre>";

【讨论】:

    【解决方案2】:

    使用mogrify 命令。看看docs

    这会将文件夹中的所有图像转换为新格式,并且速度更快。

    mogrify -format jpg *.tif
    

    【讨论】:

    • 如何回答这个问题?
    • 它解决了需要做的事情:将一批图像转换为 jpg。由于单个转换需要时间,因此您无法真正巧妙地执行循环,因为您需要等待转换完成(或生成多个 im 实例)。给定的解决方案旨在用于批量转换的情况。
    • 不是,OP 已经在使用convert 并且不会覆盖文件,因为他正在从 tiff 转换为 jpeg。此外,他只想转换名称中包含newVOP 的文件,因此掩码*.tif 是错误的。根本没有提供上下文,只是“使用它”。它不能解决当前的问题,也不能满足 OP 的需求。问题在于命令的执行方式,而不是使用的命令。
    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 2021-08-27
    • 2019-02-18
    • 2016-11-01
    • 2011-03-02
    • 1970-01-01
    • 2018-04-05
    • 2016-10-23
    相关资源
    最近更新 更多