Ubuntu
(選択した領域のスクリーンショットを撮るとき Shift+Prt Scr または Ctrl+Shift+Prt Scr)we 常に長方形の領域を選択。だから、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は非常に強力なので、このスクリプトを他の形状の出力にも適応させることができます。xとyの両方向に同じ半径のellipse
を使用して、上の円を描きます。 $radius,$(bc <<<"$radius*0.5")
は、代わりに偏心度が0を超える楕円を取得します。
1: imagemagick.orgのこのスレッド からアプローチしました。
ここでスクリーンショットに関するいくつかのことを発見しました。 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
の独自のパーソナライズバージョンを使用します。
受け入れられた答え と同じ考えを使用して、六角形のスクリーンショットを撮るために別のスクリプトを作成しました。他の人に役立つ場合に備えて、ここで共有しています。
#!/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"
。