Có thể chụp ảnh màn hình của một khu vực được chọn hình tròn?


10

Khi chúng tôi chụp ảnh màn hình của các khu vực được chọn trên Ubuntu(sử dụng Shift+ Prt Scrhoặc Ctrl+ Shift+ Prt Scr), chúng tôi luôn chọn một khu vực hình chữ nhật . Vì vậy, tôi biết rằng tôi chỉ có thể chỉnh sửa hình ảnh trên một số phần mềm như Inkscape để tạo một vòng tròn với hình ảnh hình chữ nhật, nhưng tôi muốn biết nếu có cấu hình tôi có thể thay đổi để có thể chọn các loại hình dạng khác nhau (chủ yếu là hình tròn ) trực tiếp khi tôi chụp ảnh màn hình.

Có thể không?


1
điều đó là không thể chắc chắn, vòng tròn sẽ có kích thước như thế nào và vị trí của nó sẽ là gì. Màn hình in sẽ in toàn bộ màn hình (hình chữ nhật) hoặc cửa sổ hiện đang hoạt động (hình chữ nhật)
Broadsworde

Không thực sự, khi chúng tôi sử dụng Shift + PrintScreen hoặc Ctrl + Shift + PrintScreen, chúng tôi có thể in màn hình một khu vực hình chữ nhật đã chọn ... Tôi đang sử dụng Ubuntu 16.04, tôi chỉ muốn thay đổi hình chữ nhật này thành mặc định thành hình tròn .
Rafael Muynarsk

Các cài đặt có sẵn thông qua trình soạn thảo dconf cho org / gnome / gnome-ảnh chụp màn hình là: auto-save-thư mục, hiệu ứng viền, loại tệp mặc định, độ trễ, bao gồm viền, bao gồm-icc-profile, bao gồm con trỏ, cuối- thư mục lưu, chụp-window-shot (depricated). Hình dạng không hiện diện như một thiết lập.
Broadsworde

1
@Broadsworde ksnapshop có thể tại sao không;) Nó có "bàn tay tự do" để tạo ra các hình dạng kỳ lạ nhất; tạo một vòng tròn mặc dù ... bạn giỏi như thế nào khi tạo một Ramuyko;)
Rinzwind

@Ramuyko Một ý tưởng khác tôi có là sử dụng ảnh chụp màn hình hình chữ nhật thông thường và chỉ cần cắt vòng tròn lớn nhất có thể ra khỏi nó, bằng cách này bạn có thể chọn khu vực như bạn đã quen. Bạn có quan tâm đến phương pháp này là tốt?
tráng miệng

Câu trả lời:


9

Tôi tập hợp một tập lệnh nhỏ cho ảnh chụp màn hình tròn, bạn cần các gói sau (mặc dù nó cũng có thể thích ứng với các chương trình chụp màn hình khác và trình giả lập thiết bị đầu cuối):

sudo apt install xdotool gnome-screenshot imagemagick xterm

Kịch bản

#!/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"

Lưu nó như ví dụ ~/circular_screenshot.bashvà làm cho nó thực thi với chmod +x ~/circular_screenshot.bash. Khi bạn chạy nó, trước tiên tập lệnh yêu cầu bạn di chuyển con trỏ chuột đến vị trí trung tâm và nhấn Entervà sau đó di chuyển nó đến vị trí cạnh (không quan trọng, tập lệnh sẽ tính bán kính từ khoảng cách) và nhấn lại Enter. Màn hình sau đó nhấp nháy trong khi chụp ảnh màn hình (tôi khuyên bạn nên sử dụng scrot $temp_screenshotthay vào đó, nó không hiển thị hành vi kỳ quặc này.) Và ImageMagick's convert1 được sử dụng để cắt hình ảnh. Đầu ra được lưu với dấu thời gian là tên tệp trong thư mục chính của bạn, bạn có thể thay đổi hành vi này bằng cách chỉnh sửa outputbiến của tập lệnh.

Ví dụ đầu ra

đầu ra ví dụ

Gọi mà không có (hoặc tốt hơn: với một cửa sổ đầu cuối vô hình)

Tôi cho rằng bạn không muốn có một thiết bị đầu cuối chặn màn hình của bạn mỗi khi bạn tạo một ảnh chụp màn hình như vậy, vì vậy đây là một giải pháp cho điều đó; Gọi tập lệnh như sau (giả sử tập lệnh đã được lưu dưới dạng ~/circular_screenshot.bash):

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

Thao tác này chạy tập lệnh trong một cửa sổ đầu cuối vô hình (biểu tượng với màu đỏ X X và màu xanh da trời Tiết), bạn chỉ cần đảm bảo rằng nó tập trung khi bạn nhập Enter. Bạn có thể gán lệnh này cho một phím tắt bằng cách sử dụng cài đặt của môi trường máy tính để bàn của bạn.

Vì ImageMagick cực kỳ mạnh mẽ, bạn cũng có thể điều chỉnh tập lệnh này để tạo ra các hình dạng khác, tôi đã sử dụng ellipsecùng bán kính theo cả hai hướng x và y để vẽ vòng tròn ở trên - thay vào đó $radius,$(bc <<<"$radius*0.5")để lấy một hình elip có độ lệch tâm trên 0 thay vào đó.

1: Tôi đã sử dụng cách tiếp cận từ chủ đề này trên fantemagick.org .


bây giờ xdotool kết hợp với lựa chọn tự do của ksnapshot sẽ là một cái gì đó!
Sebastian Stark

Và bạn có thể thêm phím tắt tùy chỉnh trong Tất cả cài đặt> Bàn phím, + thêm phím tắt tùy chỉnh, đặt tập lệnh này vào trường lệnh và gán nó cho phím In.
Mike

@SebastianStark Bạn có ý nghĩ gì? Một lựa chọn khác nhau (có thể tương tự như ý tưởng khác của tôi )?
món tráng miệng

Khi tôi đọc xdotool, tôi đã nghĩ đến một tập lệnh sử dụng xdotool để di chuyển con trỏ chuột trong một vòng tròn để sử dụng lựa chọn tự do của ksnapshot.
Sebastian Stark

@SebastianStark Oh, bây giờ là cách thứ ba - vui lòng viết một kịch bản và thêm câu trả lời! ;)
tráng miệng

6

Tôi đã phát hiện ra một số điều ở đây về ảnh chụp màn hình. Khi chúng tôi chụp ảnh màn hình trên Ubuntu (của tôi là 16.04), chúng tôi thực sự đang sử dụng một phần mềm được gọi là gnome-screenshot. Đây là một phần mềm nguồn mở được viết bằng C và chúng ta có thể tìm thấy mã nguồn của nó trên GitHub trong liên kết này :

nhập mô tả hình ảnh ở đây

Chà, có một tập tin ở đó gọi là screenshot-area-selection.ccâu trả lời cho câu hỏi của tôi. Đây là một tệp có 361 dòng mã vì vậy tôi sẽ không dán nó ở đây. Nhưng theo như tôi hiểu về tệp này (không nhiều), nó sử dụng nhiều hàm được cấu trúc xung quanh để xây dựng một hình chữ nhật ... Giống như trong đoạn mã này:

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;

Vì vậy, kết luận của tôi là không thể thay đổi bất kỳ cấu hình nào để chụp ảnh màn hình bằng cách sử dụng gnome-screenshotmã của nó không có cấu trúc cho điều đó ... Mặc dù có thể tải xuống mã, tự thay đổi mã, biên dịch lại và sau đó sử dụng phiên bản được cá nhân hóa của riêng tôi của gnome-screenshot.


4

Sử dụng cùng một ý tưởng về câu trả lời được chấp nhận Tôi đã tạo một tập lệnh khác để chụp ảnh màn hình lục giác và tôi sẽ chia sẻ nó ở đây trong trường hợp nó hữu ích cho người khác.

Ví dụ đầu ra

ví dụ về ảnh chụp màn hình lục giác

Kịch bản

#!/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"

Quá trình này hoàn toàn giống với câu trả lời được chấp nhận . Trong trường hợp này tôi chỉ thay đổi tên tập lệnh:

"Lưu nó như ví dụ ~/hexagonal_screenshot.bashvà làm cho nó có thể thực thi được chmod +x ~/hexagonal_screenshot.bash. Khi bạn chạy nó, trước tiên tập lệnh sẽ yêu cầu bạn di chuyển con trỏ chuột đến vị trí trung tâm và nhấn Enter và sau đó di chuyển nó đến vị trí cạnh (không quan trọng, đó là tập lệnh tính toán bán kính từ khoảng cách) và nhấn lại Enter. Màn hình sẽ nhấp nháy trong khi chụp ảnh màn hình (tôi khuyên bạn nên sử dụng scrot $temp_screenshotthay vào đó, nó không hiển thị hành vi kỳ quặc này.) và ImageMagick convertđược sử dụng để cắt hình ảnh. được lưu với dấu thời gian là tên tệp trong thư mục chính của bạn, bạn có thể thay đổi hành vi này bằng cách chỉnh sửa outputbiến của tập lệnh. "


thông tin thêm

Trong trường hợp ai đó tò mò về toán học liên quan, đây là cách tôi đã làm nó. Để tạo một đa giác có số cạnh hoặc hình dạng khác nhau bằng cách sử dụng Imagemagickquy trình sẽ giống nhau: làm toán và thêm hoặc xóa các điểm vào phần này của mã "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".

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.