우리가 선택한 영역의 스크린 샷을 촬영하면 Ubuntu
(사용 Shift+ Prt Scr또는 Ctrl+ Shift+ Prt Scr) 우리는 항상 사각형 영역을 선택합니다 . 따라서 Inkscape와 같은 일부 소프트웨어에서 이미지를 편집하여 직사각형 이미지로 원을 만들 수는 있지만 다른 종류의 모양 (주로 원) 을 선택할 수 있도록 구성을 변경할 수 있는지 알고 싶습니다. ) 스크린 샷을 찍을 때 직접
가능합니까?
우리가 선택한 영역의 스크린 샷을 촬영하면 Ubuntu
(사용 Shift+ Prt Scr또는 Ctrl+ Shift+ Prt Scr) 우리는 항상 사각형 영역을 선택합니다 . 따라서 Inkscape와 같은 일부 소프트웨어에서 이미지를 편집하여 직사각형 이미지로 원을 만들 수는 있지만 다른 종류의 모양 (주로 원) 을 선택할 수 있도록 구성을 변경할 수 있는지 알고 싶습니다. ) 스크린 샷을 찍을 때 직접
가능합니까?
답변:
원형 스크린 샷을위한 작은 스크립트를 만들려면 다음 패키지가 필요합니다 (다른 스크린 샷 프로그램 및 터미널 에뮬레이터에도 적용 가능함).
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
. 스크립트를 실행하면 먼저 마우스 커서를 중앙 위치 Enter로 이동 한 다음을 누른 다음 가장자리 위치로 이동하라는 메시지가 표시됩니다 (어떤 거리에 상관없이 스크립트는 거리에서 반경을 계산 함) Enter. 스크린 샷을 찍는 동안 화면이 깜박입니다 ( 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")
.
1 : imagemagick.org의이 스레드에서 접근했습니다 .
스크린 샷에 대한 몇 가지 사실을 발견했습니다. 우분투에서 스크린 샷을 찍을 때 (광산은 16.04입니다) 실제로는이라는 소프트웨어를 사용하고 있습니다 gnome-screenshot
. C로 작성된 오픈 소스 소프트웨어이며이 링크 에서 GitHub의 소스 코드를 찾을 수 있습니다 .
글쎄, screenshot-area-selection.c
내 질문에 대답 하는 파일이 있습니다. 361 줄의 코드가있는 파일이므로 여기에 붙여 넣지 않겠습니다. 그러나 내가이 파일에 대해 이해하는 한 (많지 않음) 직사각형 모양을 만드는 주위에 구조화 된 많은 기능을 사용합니다 ...이 코드에서와 같이 :
create_select_window (void)
{
GtkWidget *window;
GdkScreen *screen;
GdkVisual *visual;
screen = gdk_screen_get_default ();
visual = gdk_screen_get_rgba_visual (screen);
window = gtk_window_new (GTK_WINDOW_POPUP);
if (gdk_screen_is_composited (screen) && visual)
{
gtk_widget_set_visual (window, visual);
gtk_widget_set_app_paintable (window, TRUE);
}
g_signal_connect (window, "draw", G_CALLBACK (select_window_draw), NULL);
gtk_window_move (GTK_WINDOW (window), -100, -100);
gtk_window_resize (GTK_WINDOW (window), 10, 10);
gtk_widget_show (window);
return window;
}
typedef struct {
GdkRectangle rectangle;
SelectAreaCallback callback;
gpointer callback_data;
gboolean aborted;
} CallbackData;
그래서 내 결론은 gnome-screenshot
코드가 구조화되어 있지 않기 때문에 스크린 샷을 찍기 위해 구성을 변경할 수 없다는 것입니다 ... 코드를 다운로드하고 코드를 직접 변경하고 다시 컴파일 한 다음 나만의 맞춤 버전을 사용할 수는 있지만 의 gnome-screenshot
.
허용 된 답변에 대한 동일한 아이디어를 사용하여 6 각형 스크린 샷을 찍기 위해 다른 스크립트를 만들었으며 다른 사람에게 유용 할 수 있도록 여기에서 공유하고 있습니다.
#!/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
실행하십시오. 실행할 때 스크립트는 먼저 마우스 커서를 중앙 위치로 이동하고 Enter 키를 누른 다음 가장자리 위치로 이동하라는 메시지를 표시합니다. 스크립트는 거리에서 반경을 계산하고 Enter 키를 다시 누릅니다. 스크린 샷을 찍는 동안 화면이 깜박 거립니다 ( scrot $temp_screenshot
대신 사용 하지 않는 것이 좋습니다 ) convert
. 이미지를 자르는 데 ImageMagick 이 사용됩니다. 타임 스탬프를 홈 디렉토리에 파일 이름으로 저장 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"
.