Raf*_*rsk 10 scripts programming productivity software-recommendation screenshot
当我们在Ubuntu(使用Shift+Prt Scr或Ctrl+ Shift+ Prt Scr)上截取选定区域的屏幕截图时,我们总是选择一个矩形区域。所以,我知道我可以在一些软件上编辑图像,比如 Inkscape 来创建一个带有矩形图像的圆圈,但我想知道是否有我可以更改的配置,以便能够选择不同类型的形状(主要是圆形) ) 直接在我截屏时。
是否可以?
我为圆形屏幕截图整理了一个小脚本,您需要以下软件包(尽管它也适用于其他屏幕截图程序和终端模拟器):
sudo apt install xdotool gnome-screenshot imagemagick xterm
Run Code Online (Sandbox Code Playgroud)
#!/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"
Run Code Online (Sandbox Code Playgroud)
将其另存为 eg~/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
Run Code Online (Sandbox Code Playgroud)
这会在一个不可见的终端窗口(带有红色“X”和蓝色“T”的图标)中运行脚本,您只需要确保在键入时它是焦点Enter。您可以使用桌面环境的设置将此命令分配给键盘快捷方式。
由于 ImageMagick 非常强大,您也可以调整此脚本以输出其他形状,我使用ellipse相同的半径在 x 和 y 方向绘制上面的圆 - 将其更改为例如$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;
Run Code Online (Sandbox Code Playgroud)
所以,我的结论是,无法更改任何配置来截屏,gnome-screenshot因为它的代码不是为此而构建的......虽然可以下载代码,自己更改代码,重新编译,然后使用我自己的个性化版本的gnome-screenshot。