円形の選択された領域のスクリーンショットを撮ることは可能ですか?


10

我々は上の選択された領域のスクリーンショットを撮るときUbuntu(使用してShift+ Prt ScrまたはCtrl+ Shift+ Prt Scr)私たちは常に矩形領域を選択します。したがって、Inkscapeなどのソフトウェアで画像を編集して長方形の画像で円を作成できることはわかっていますが、さまざまな種類の形状(主に円)選択できるように変更できる構成があるかどうかを知りたいです。)スクリーンショットを撮っているときに直接。

出来ますか?


1
確かにそれは不可能でしょう。円のサイズと位置はどうなるでしょう。画面の印刷は、画面全体(長方形)または現在アクティブなウィンドウ(長方形)のいずれかを印刷します
Broadsworde

実際には、Shift + PrintScreenまたはCtrl + Shift + PrintScreenを使用すると、選択した長方形の領域を画面に印刷できます... Ubuntu 16.04を使用していますが、デフォルトの円形の長方形に変更したいだけです。 。
ラファエルムイナルスク2018年

org / gnome / gnome-screenshotのdconfエディターを介して使用可能な設定は、auto-save-directory、border-effect、default-file-type、delay、include-border、include-icc-profile、include-pointer、last- save-directory、take-window-shot(非推奨)。設定として存在しない形状。
Broadsworde、2018年

1
@Broadsworde ksnapshopはそうすることができます;)それは最も奇妙な形を作るための「フリーハンド」を持っています。でもサークルを作る...ラムイコを1つ作るのはどれくらい上手か;)
Rinzwind

@Ramuyko私が持っていたもう1つのアイデアは、通常の長方形のスクリーンショットを使用して、可能な限り最大の円を切り取ることでした。このアプローチにも興味がありますか?
デザート

回答:


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は非常に強力なので、このスクリプトを他の形状も出力するように調整できますellipse。xとyの両方の方向に同じ半径を使用して、上の円を描画しました。たとえば$radius,$(bc <<<"$radius*0.5")、偏心が0を超える楕円になるように変更してください。

1:imagemagick.orgのこのスレッドからアプローチを採用しました


これで、xdotoolとksnapshotのフリーハンド選択を組み合わせたものは何かになります!
セバスチャンスターク

また、[すべての設定]> [キーボード]でカスタムショートカットを追加し、+カスタムショートカットを追加して、このスクリプトをコマンドフィールドに配置し、それをPrintキーに割り当てることができます。
マイク

@SebastianStark何を考えていますか?別の選択(多分私の他のアイデアに似てます)?
デザート

xdotoolを読んだとき、xdotoolを使用してマウスカーソルを円状に移動させ、ksnapshotのフリーハンドでの選択を利用するスクリプトを考えました。
セバスチャンスターク

@SebastianStarkああ、これが3番目の方法です。スクリプトを書いて、回答を追加してください!;)
デザート

6

スクリーンショットについて、ここでいくつか発見しました。Ubuntuでスクリーンショットを撮るとき(私は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

受け入れられた回答の同じアイデアを使用して、六角形のスクリーンショットを撮る別のスクリプトを作成しました。他の人に役立つ場合に備えて、ここでそれを共有しています。

出力例

六角形のスクリーンショットの例

スクリプト

#!/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代わりに使用することをお勧めします。この奇妙な動作は表示されません)。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"

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.