선택한 원형 영역의 스크린 샷을 찍을 수 있습니까?


10

우리가 선택한 영역의 스크린 샷을 촬영하면 Ubuntu(사용 Shift+ Prt Scr또는 Ctrl+ Shift+ Prt Scr) 우리는 항상 사각형 영역을 선택합니다 . 따라서 Inkscape와 같은 일부 소프트웨어에서 이미지를 편집하여 직사각형 이미지로 원을 만들 수는 있지만 다른 종류의 모양 (주로 원)선택할 수 있도록 구성을 변경할 수 있는지 알고 싶습니다. ) 스크린 샷을 찍을 때 직접

가능합니까?


1
확실히 불가능할 것입니다. 원의 크기와 위치는 무엇입니까? 화면 인쇄는 전체 화면 (직사각형) 또는 현재 활성화 된 창 (직사각형)을 인쇄합니다.
Broadsworde

실제로는 Shift + PrintScreen 또는 Ctrl + Shift + PrintScreen을 사용할 때 이미 선택된 사각형 영역을 화면에 인쇄 할 수 있습니다. 우분투 16.04를 사용하고 있습니다.이 사각형 모양을 원형 모양으로 변경하고 싶습니다. .
라파엘 Muynarsk

org / gnome / gnome-screenshot에 대해 dconf 편집기를 통해 사용할 수있는 설정은 자동 저장 디렉토리, 경계 효과, 기본 파일 유형, 지연, 포함 범위, include-icc-profile, include-pointer, last- 저장 디렉토리, 테이크 윈도우 샷 (더 이상 사용되지 않음). 설정에 모양이 없습니다.
Broadsworde

1
@Broadsworde ksnapshop은 왜 그렇게 할 수 없습니까?) 가장 이상한 모양을 만드는 "자유로운 손"을 가지고 있습니다. 그래도 원 만들기 ... Ramuyko 하나를 만드는 얼마나 잘;)
Rinzwind

@Ramuyko 또 다른 아이디어는 일반적인 직사각형 스크린 샷을 사용하고 가능한 가장 큰 원을 잘라내는 것입니다. 이렇게하면 익숙한 영역을 선택할 수 있습니다. 이 접근법에도 관심이 있습니까?
디저트

답변:


9

원형 스크린 샷을위한 작은 스크립트를 만들려면 다음 패키지가 필요합니다 (다른 스크린 샷 프로그램 및 터미널 에뮬레이터에도 적용 가능함).

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의 convert1 은 이미지를 자르는 데 사용됩니다. 출력은 홈 디렉토리에 파일 이름으로 타임 스탬프와 함께 저장되며 output스크립트 변수를 편집하여이 동작을 변경할 수 있습니다 .

출력 예

예제 출력

터미널 창없이 (또는 보이지 않는) 통화

스크린 샷을 만들 때마다 터미널이 화면을 차단하고 싶지 않다고 가정 해 보겠습니다. 다음과 같이 스크립트를 호출하십시오 (스크립트가로 저장되었다고 가정 ~/circular_screenshot.bash).

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

이 스크립트는 보이지 않는 터미널 창 (빨간색“X”와 파란색“T”가있는 아이콘)에서 스크립트를 실행합니다 Enter. 데스크탑 환경 설정을 사용하여이 명령을 키보드 단축키에 지정할 수 있습니다.

ImageMagick은 엄청나게 강력하기 때문에이 스크립트를 다른 모양도 출력하도록 조정할 수 있습니다. 나는 ellipsex와 y 방향으로 같은 반경을 사용 하여 위의 원을 그렸습니다 $radius,$(bc <<<"$radius*0.5").

1 : imagemagick.org의이 스레드에서 접근했습니다 .


이제 xdotool을 ksnapshot의 자유 선택과 결합하면 무언가가 될 것입니다!
Sebastian Stark

모든 설정> 키보드에서 사용자 정의 단축키를 추가하고 + 사용자 정의 단축키를 추가하고 명령 필드에이 스크립트를 배치 한 후 인쇄 키에 지정할 수 있습니다.
Mike

@SebastianStark 무엇을 생각하고 있습니까? 다른 선택 ( 내 다른 아이디어 와 비슷할 수 있음 )?
디저트

xdotool을 읽을 때 xdotool을 사용하여 마우스 커서를 원으로 이동하여 ksnapshot을 자유롭게 선택하는 스크립트를 생각했습니다.
Sebastian Stark

@SebastianStark 아, 이제 세 번째 방법입니다 – 스크립트를 작성하고 답을 추가하십시오! ;)
디저트

6

스크린 샷에 대한 몇 가지 사실을 발견했습니다. 우분투에서 스크린 샷을 찍을 때 (광산은 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.


4

허용 된 답변에 대한 동일한 아이디어를 사용하여 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".

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.