Я пытаюсь получить изображение из буфера обмена и сохранить его в файл изображения с помощью PHP, к сожалению, PHP не может этого сделать, поэтому я устанавливаю pngpaste на свой Mac и использую php Функция shell_exec()
/ exec()
/ popen()
для выполнения команды pngpaste
для выполнения этой работы.
Сначала я устанавливаю pngpaste
на свой Mac:
brew install pngpaste
Затем я пытаюсь скопировать изображение или сделать снимок экрана в буфер обмена, после чего я запускаю следующую команду:
pngpaste ./screenshot.png
работает отлично! screenshot.png
успешно сгенерирован.
Затем я пытаюсь скопировать какой-нибудь открытый текст в буфер обмена (что означает, что в буфере обмена больше нет изображения), и снова выполнить команду, приведенную выше, она вернется, как показано на следующем рисунке (что является правильным выводом, поскольку нет изображения в буфере обмена):
Затем я пытаюсь выполнить вышеуказанную команду с помощью PHP. Я создаю index.php
, код внутри index.php
довольно прост:
<?php
$command = '/usr/local/bin/pngpaste ./screenshot.png';
$output = shell_exec($command);
echo $output;
Тогда я бегу:
php index.php
Это тоже работает нормально, если я сделаю снимок экрана в буфер обмена, будет также создан screenshot.png
, и если в буфере обмена нет изображения, он возвращает точно некоторые слова в качестве выполняемой команды напрямую.
Все выглядит хорошо, теперь я собираюсь использовать Alfred
. Я создал рабочий процесс:
Затем дважды щелкните Run Script
и введите команду в поле → щелкните save
:
Как видите, я установил ярлык рабочего процесса на control+command+v
, что означает, что когда я нажимаю control+command+v
, Альфред выполняет следующую команду:
/usr/local/bin/php /Users/bruce/Downloads/index.php
Затем я делаю скриншот в буфер обмена и нажимаю ярлык control+command+v
, угадайте, что произойдет? Правильно! screenshot.png
создается снова, он тоже отлично работает.
А потом я пытаюсь нажать control+command+v
, когда в буфере обмена нет изображения, должно быть возвращено pngpaste: No image data found on the clipboard, or could not convert!
верно? Но угадайте, что, вообще ничего, я не могу получить $output
, возвращаемый shell_exec()
, после этого я попытался exec()
/ popen()
, но это то же самое, никакого вывода вообще.
Я попытался отредактировать код следующим образом и нажать ярлык control+command+v
:
<?php
$command = '/usr/local/bin/pngpaste ./screenshot.jpeg';
$output = shell_exec($command);
$output = 'this is a test ouput' . output;
echo $output;
Альфред вернул this is a test ouput
, что означает, что переменная $output
равна NULL
или empty string
, но она не должна быть пустой, она должна быть возвращена pngpaste: No image data found on the clipboard, or could not convert!
, когда в буфере обмена нет изображения.
Итак, мой вопрос: как я могу решить эту проблему? Как я могу получить вывод, который возвращается на pngpaste
, когда в буфере обмена нет изображения?