Невозможно запустить команду PHP exec для ImageMagick в цикле for - PullRequest
1 голос
/ 30 октября 2019

Мне нужно написать PHP-скрипт для вызова программного обеспечения ImageMagick, установленного на моем сервере (Windows Server 2008 r2 с сервером Apache), чтобы преобразовать группу изображений в формате TIFF в формат JPEG.

Я уже пробовал exec() с командой ImageMagick convert для отдельного изображения, и это работает, но когда я помещаю 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.

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Я бы поместил ваши входные и выходные строки в переменную, чтобы вы могли отобразить их, чтобы увидеть, что они содержат то, что вы ожидаете.

Почему вы удаляете .tif, а затем добавляете его обратно?

Вам не нужно конвертировать с помощью magick.

В Windows я всегда помещаю путь к файлу внутри "", чтобы его содержать.

Я не уверен, если вам нужно экранировать \, но вывод вашей переменной должендокажите это.

Попробуйте добавить сообщение об ошибке, написав это в своем коде:

<code>$array=array();
echo "<pre>";
exec("magick Input Output 2>&1", $array); // Your Imagemagick command
echo "<br>".print_r($array)."<br>"; 
echo "
";
1 голос
/ 30 октября 2019

Используйте команду mogrify. Взгляните на документы

Это преобразует все изображения в папке в новый формат и намного быстрее.

mogrify -format jpg *.tif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...