Можно ли сделать снимок экрана с круговой выбранной областью?

Часть вашего [1]+ Done ... вашего вывода, похоже, исходит из управления работой Bash. Вы обычно получаете его, когда команда, которую вы начали в фоновом режиме, завершается следующим образом:

$ sleep 1 &
[1] 20931

$ 
[1]+  Done                    sleep 1

Одним из решений для подавления этих выходов управления работой является запуск фоновой команды в подселлем, заключая его в круглые скобки:

$ ( sleep 1 &)

$ 

Я не могу сказать, подходит ли это в вашей ситуации, потому что вы еще не показывали свои фактические команды, и этот подход имеет несколько недостатков :

Задание больше не может управляться (например, команды jobs, bg, fg), но по мере запуска из сценария запуска я предполагаю, что это не будет предназначено так или иначе. Если команда изменяла свою среду (например, устанавливала переменные или меняла рабочий каталог), это повлияло бы только на подоболочку, а не на остальную часть скрипта.

Другой способ - заставить оболочку забыть о задании после того, как он начал использовать disown, например:

$ sleep 1 & disown
[1] 27248

$ 

Таким образом, это также не прекратится, когда оболочка выйдет, поэтому она может продолжать работать после выхода пользователя из системы, если я понял это правильно (исправьте меня, если нет).

Источники и дальнейшее чтение :

Выполнение команд bash в фоновом режиме без задания печати и идентификаторов процесса. Есть ли способ сделать настройку управления настройкой bash спокойной? Как / dev / null фоновые процессы «информационный» вывод? Как подавить код завершения готовых фоновых заданий
9
задан 21 May 2018 в 01:20

6 ответов

Я собрал небольшой скрипт для круговых скриншотов, вам понадобятся следующие пакеты (хотя он также адаптируется для других программ-скриншотов и эмуляторов терминала):

sudo apt install xdotool gnome-screenshot imagemagick xterm

Сценарий

[ f2]

Сохраните его, например, ~/circular_screenshot.bash и сделать его исполняемым с помощью chmod +x ~/circular_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши в центральное положение и нажать «Ввод», а затем переместить его в крайнее положение (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите Войти. Экран затем мерцает, пока снимок сделан (я рекомендую использовать scrot $temp_screenshot вместо этого, он не показывает это странное поведение.) И ImageMagick convert 1 используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав переменную output скрипта.

Пример вывода

[!d7 ]

Вызов без (или лучше: с невидимым) оконечным окном

Я полагаю, вы не хотите, чтобы каждый раз, когда вы делаете скриншот, блокируете свой экран, так что вот решение для этого; Вызовите скрипт следующим образом (предполагая, что скрипт был сохранен как ~/circular_screenshot.bash):

xterm -geometry 0x0-1-1 -e ~/circular_screenshot.bash

Выполняет сценарий в невидимом окне терминала (значок с красным «X» и синим «T», ), вам просто нужно убедиться, что он сфокусирован, когда вы набираете Enter . Вы можете назначить эту команду ярлыку на клавиатуре с помощью настроек среды рабочего стола.

Поскольку ImageMagick невероятно мощный, вы можете адаптировать этот скрипт для вывода других фигур, я использовал ellipse с одинаковым радиусом в обоих x и y для рисования круга выше - измените это на, например, $radius,$(bc <<<"$radius*0.5"), чтобы получить вместо этого эллипс с эксцентриситетом выше 0.

1

7
ответ дан 22 May 2018 в 10:47
  • 1
    теперь xdotool в сочетании со свободным выбором ksnapshot будет чем-то! – Sebastian Stark 14 May 2018 в 17:15
  • 2
    И вы можете добавить пользовательский ярлык во все настройки & gt; Клавиатура + добавьте специальный ярлык, поместите этот скрипт в поле команды и назначьте его клавише Print. – Mike 14 May 2018 в 17:22
  • 3
    @SebastianStark Что вы имеете в виду? Другой выбор (возможно, аналогичный моей другой идее )? – dessert 14 May 2018 в 21:44
  • 4
    Когда я читал xdotool, я думал о скрипте, который использует xdotool для перемещения курсора мыши по кругу, чтобы использовать произвольный выбор ksnapshot. – Sebastian Stark 14 May 2018 в 21:55
  • 5
    @SebastianStark О, теперь это третий способ - напишите сценарий и добавьте ответ! ;) – dessert 14 May 2018 в 22:17

Я собрал небольшой скрипт для круговых скриншотов, вам понадобятся следующие пакеты (хотя он также адаптируется для других программ-скриншотов и эмуляторов терминала):

sudo apt install xdotool gnome-screenshot imagemagick xterm

Сценарий

#!/bin/bash output=~/$(date +%F_%H%M%S).png temp_screenshot=$(mktemp).png read -p "Move cursor to center and press Enter" eval $(xdotool getmouselocation --shell) x_center=$X y_center=$Y read -p "Move cursor to edge and press Enter" eval $(xdotool getmouselocation --shell) gnome-screenshot -f $temp_screenshot radius=$(bc <<<"sqrt(($X-$x_center)^2+($Y-$y_center)^2)") convert $temp_screenshot -alpha on \( +clone -channel a -evaluate multiply 0 -draw "ellipse $x_center,$y_center $radius,$radius 0,360" \) -compose DstIn -composite -trim "$output"

Сохраните его, например, ~/circular_screenshot.bash и сделать его исполняемым с помощью chmod +x ~/circular_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши в центральное положение и нажать «Ввод», а затем переместить его в крайнее положение (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите Войти. Экран затем мерцает, пока снимок сделан (я рекомендую использовать scrot $temp_screenshot вместо этого, он не показывает это странное поведение.) И ImageMagick convert 1 используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав переменную output скрипта.

Пример вывода

Вызов без (или лучше: с невидимым) оконечным окном

Я полагаю, вы не хотите, чтобы каждый раз, когда вы делаете скриншот, блокируете свой экран, так что вот решение для этого; Вызовите скрипт следующим образом (предполагая, что скрипт был сохранен как ~/circular_screenshot.bash):

xterm -geometry 0x0-1-1 -e ~/circular_screenshot.bash

Выполняет сценарий в невидимом окне терминала (значок с красным «X» и синим «T», ), вам просто нужно убедиться, что он сфокусирован, когда вы набираете Enter . Вы можете назначить эту команду ярлыку на клавиатуре с помощью настроек среды рабочего стола.

Поскольку ImageMagick невероятно мощный, вы можете адаптировать этот скрипт для вывода других фигур, я использовал ellipse с одинаковым радиусом в обоих x и y для рисования круга выше - измените это на, например, $radius,$(bc <<<"$radius*0.5"), чтобы получить вместо этого эллипс с эксцентриситетом выше 0.

1

9
ответ дан 17 July 2018 в 14:32

Я собрал небольшой скрипт для круговых скриншотов, вам понадобятся следующие пакеты (хотя он также адаптируется для других программ-скриншотов и эмуляторов терминала):

sudo apt install xdotool gnome-screenshot imagemagick xterm

Сценарий

#!/bin/bash output=~/$(date +%F_%H%M%S).png temp_screenshot=$(mktemp).png read -p "Move cursor to center and press Enter" eval $(xdotool getmouselocation --shell) x_center=$X y_center=$Y read -p "Move cursor to edge and press Enter" eval $(xdotool getmouselocation --shell) gnome-screenshot -f $temp_screenshot radius=$(bc <<<"sqrt(($X-$x_center)^2+($Y-$y_center)^2)") convert $temp_screenshot -alpha on \( +clone -channel a -evaluate multiply 0 -draw "ellipse $x_center,$y_center $radius,$radius 0,360" \) -compose DstIn -composite -trim "$output"

Сохраните его, например, ~/circular_screenshot.bash и сделать его исполняемым с помощью chmod +x ~/circular_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши в центральное положение и нажать «Ввод», а затем переместить его в крайнее положение (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите Войти. Экран затем мерцает, пока снимок сделан (я рекомендую использовать scrot $temp_screenshot вместо этого, он не показывает это странное поведение.) И ImageMagick convert 1 используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав переменную output скрипта.

Пример вывода

Вызов без (или лучше: с невидимым) оконечным окном

Я полагаю, вы не хотите, чтобы каждый раз, когда вы делаете скриншот, блокируете свой экран, так что вот решение для этого; Вызовите скрипт следующим образом (предполагая, что скрипт был сохранен как ~/circular_screenshot.bash):

xterm -geometry 0x0-1-1 -e ~/circular_screenshot.bash

Выполняет сценарий в невидимом окне терминала (значок с красным «X» и синим «T», ), вам просто нужно убедиться, что он сфокусирован, когда вы набираете Enter . Вы можете назначить эту команду ярлыку на клавиатуре с помощью настроек среды рабочего стола.

Поскольку ImageMagick невероятно мощный, вы можете адаптировать этот скрипт для вывода других фигур, я использовал ellipse с одинаковым радиусом в обоих x и y для рисования круга выше - измените это на, например, $radius,$(bc <<<"$radius*0.5"), чтобы получить вместо этого эллипс с эксцентриситетом выше 0.

1

9
ответ дан 20 July 2018 в 14:36

Используя ту же идею принятого ответа, я создал эту гексагональную форму для личного использования и решил поделиться сценарием здесь, если это полезно для кого-то другого.

Пример вывода

3]

Сценарий

#!/bin/bash

output=~/$(date +%F_%H%M%S).png
temp_screenshot=$(mktemp).png

read -p "Move cursor to center and press Enter"
eval $(xdotool getmouselocation --shell)
x1=$X
y1=$Y
read -p "Move cursor to edge and press Enter"
eval $(xdotool getmouselocation --shell)
x2=$X
y2=$Y

gnome-screenshot -f $temp_screenshot

radius=$(bc -l <<<"sqrt(($x2-$x1)^2+($y2-$y1)^2)")
ca=$(bc -l <<<"$radius/sqrt(3)") 
h=$(bc -l <<<"$radius/(sqrt(3)/2)")

P1_x=$(bc <<<"$x1+$ca")
P1_y=$(bc <<<"$y1+$radius")

P2_x=$(bc <<<"$x1+$h")
P2_y=$(bc <<<"$y1")

P3_x=$(bc <<<"$x1+$ca")
P3_y=$(bc <<<"$y1-$radius")

P4_x=$(bc <<<"$x1-$ca")
P4_y=$(bc <<<"$y1-$radius")

P5_x=$(bc <<<"$x1-$h")
P5_y=$(bc <<<"$y1")

P6_x=$(bc <<<"$x1-$ca")
P6_y=$(bc <<<"$y1+$radius")

convert $temp_screenshot -alpha on \
        \( +clone -channel a -evaluate multiply 0 -draw \
        "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y" \) \
        -compose DstIn -composite -trim "$output"

Процесс в точности совпадает с принятым ответом. В этом случае я просто изменил имя скрипта:

«Сохраните его, например, ~/hexagonal_screenshot.bash, и сделайте его исполняемым с помощью chmod +x ~/hexagonal_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить указатель мыши на в центральном положении и нажмите «Ввод», а затем переместите его в положение края (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите «Ввод». Затем экран мерцает во время снятия снимка (я рекомендую использовать [ f4], это не показывает это нечетное поведение.) и ImageMagick convert используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав [ f6].

Пример вывода

Если кто-то интересуется математикой, то здесь как я это сделал. Для создания многоугольника с различным количеством ребер или разных фигур с помощью Imagemagick процедура будет одинаковой: выполните математику и добавьте или удалите точки в эту часть кода "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y".

4]

3
ответ дан 22 May 2018 в 10:47
  • 1
    На всякий случай кто-то заинтересован, есть еще один вопрос: unix.stackexchange.com/questions/444160/… . Скрипт из вопроса этой ссылки автоматически снимает изображения в папке «Мои рисунки» после их создания и копирует их в другую папку при изменении их размера. Это полезно для создания значков. Мы можем использовать сценарий этого вопроса вместе со сценарием этого вопроса. – Ramuyko 17 May 2018 в 07:29

Используя ту же идею принятого ответа, я создал другой скрипт для создания шестиугольных скриншотов, и я делюсь им здесь, если это полезно для кого-то другого.

Пример вывода

принятый ответ

Пример вывода

#!/bin/bash output=~/$(date +%F_%H%M%S).png temp_screenshot=$(mktemp).png read -p "Move cursor to center and press Enter" eval $(xdotool getmouselocation --shell) x1=$X y1=$Y read -p "Move cursor to edge and press Enter" eval $(xdotool getmouselocation --shell) x2=$X y2=$Y gnome-screenshot -f $temp_screenshot radius=$(bc -l <<<"sqrt(($x2-$x1)^2+($y2-$y1)^2)") ca=$(bc -l <<<"$radius/sqrt(3)") h=$(bc -l <<<"$radius/(sqrt(3)/2)") P1_x=$(bc <<<"$x1+$ca") P1_y=$(bc <<<"$y1+$radius") P2_x=$(bc <<<"$x1+$h") P2_y=$(bc <<<"$y1") P3_x=$(bc <<<"$x1+$ca") P3_y=$(bc <<<"$y1-$radius") P4_x=$(bc <<<"$x1-$ca") P4_y=$(bc <<<"$y1-$radius") P5_x=$(bc <<<"$x1-$h") P5_y=$(bc <<<"$y1") P6_x=$(bc <<<"$x1-$ca") P6_y=$(bc <<<"$y1+$radius") convert $temp_screenshot -alpha on \ \( +clone -channel a -evaluate multiply 0 -draw \ "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y" \) \ -compose DstIn -composite -trim "$output"

Процесс в точности совпадает с принятым ответом. В этом случае я просто изменил имя сценария:

«Сохраните его, например, ~/hexagonal_screenshot.bash, и сделайте его исполняемым с помощью chmod +x ~/hexagonal_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши на в центральном положении и нажмите «Ввод», а затем переместите его в положение края (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите «Ввод». Затем экран мерцает во время снятия снимка (я рекомендую использовать scrot $temp_screenshot, это не показывает это нечетное поведение.) и ImageMagick convert используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав output.

Дополнительная информация

Если кто-то интересуется математикой, вот как я это сделал. Для создания многоугольника с различным количеством ребер или разных фигур с помощью Imagemagick процедура будет одинаковой: выполните математику и добавьте или удалите точки в эту часть кода "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y".

[ ! d16]

4
ответ дан 17 July 2018 в 14:32

Используя ту же идею принятого ответа, я создал другой скрипт для создания шестиугольных скриншотов, и я делюсь им здесь, если это полезно для кого-то другого.

Пример вывода

принятый ответ

Пример вывода

#!/bin/bash output=~/$(date +%F_%H%M%S).png temp_screenshot=$(mktemp).png read -p "Move cursor to center and press Enter" eval $(xdotool getmouselocation --shell) x1=$X y1=$Y read -p "Move cursor to edge and press Enter" eval $(xdotool getmouselocation --shell) x2=$X y2=$Y gnome-screenshot -f $temp_screenshot radius=$(bc -l <<<"sqrt(($x2-$x1)^2+($y2-$y1)^2)") ca=$(bc -l <<<"$radius/sqrt(3)") h=$(bc -l <<<"$radius/(sqrt(3)/2)") P1_x=$(bc <<<"$x1+$ca") P1_y=$(bc <<<"$y1+$radius") P2_x=$(bc <<<"$x1+$h") P2_y=$(bc <<<"$y1") P3_x=$(bc <<<"$x1+$ca") P3_y=$(bc <<<"$y1-$radius") P4_x=$(bc <<<"$x1-$ca") P4_y=$(bc <<<"$y1-$radius") P5_x=$(bc <<<"$x1-$h") P5_y=$(bc <<<"$y1") P6_x=$(bc <<<"$x1-$ca") P6_y=$(bc <<<"$y1+$radius") convert $temp_screenshot -alpha on \ \( +clone -channel a -evaluate multiply 0 -draw \ "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y" \) \ -compose DstIn -composite -trim "$output"

Процесс в точности совпадает с принятым ответом. В этом случае я просто изменил имя сценария:

«Сохраните его, например, ~/hexagonal_screenshot.bash, и сделайте его исполняемым с помощью chmod +x ~/hexagonal_screenshot.bash. Когда вы запустите его, сценарий сначала попросит вас переместить курсор мыши на в центральном положении и нажмите «Ввод», а затем переместите его в положение края (неважно, какой сценарий вычисляет радиус с расстояния) и снова нажмите «Ввод». Затем экран мерцает во время снятия снимка (я рекомендую использовать scrot $temp_screenshot, это не показывает это нечетное поведение.) и ImageMagick convert используется для обрезки изображения. Выход сохраняется с отметкой времени как имя файла в вашем домашнем каталоге, вы можете изменить это поведение, отредактировав output.

Дополнительная информация

Если кто-то интересуется математикой, вот как я это сделал. Для создания многоугольника с различным количеством ребер или разных фигур с помощью Imagemagick процедура будет одинаковой: выполните математику и добавьте или удалите точки в эту часть кода "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y".

[ ! d16]

4
ответ дан 20 July 2018 в 14:36

Другие вопросы по тегам:

Похожие вопросы: