Taking screenshot of a specific area from the command line
I am running Lubuntu desktop 12 and I am looking for a tool that can take screenshots of a certain area from the command line.
I have tried out Shutter. It works but, when I run the command it generates warnings ( Wnck-WARNING **: Unhandled action type
). I think the tool might be designed to run under GNOME and might not be compatible with Lubuntu. The screenshot is taken successfully, but the command hangs, which is something I cannot work with.
So what is a good screenshot tool that
- Runs from the command line
- Can capture a certain area of the desktop
I like to add that scrot
, the tool Lubuntu ships with, does not have the option to crop certain coordinates, but only an interactively user-defined area which is not what I'm looking for.
In Lubuntu, you can do exactly what you want: take a screen shot from the command line with the command:
scrot_extended 100 100 400 400
using the script below.
The four arguments are <x>, <y>, <width>, <height>
.
I didn't have the chance (yet) to test it in Lubuntu 12.04
, but it seems unlikely it wouldn't work; it uses python 2
and basic command line tools that exist for a long time already.
Explanation
The script:
- takes a screenshot with
scrot
- saves it into a temporary file
- using
imagemagick
, it creates a new image, cropping the screen shot, with the arguments you ran the script with - the image is saved into a directory as a numbered file, to prevent overwriting
How to use
-
The script uses both
scrot
andimagemagick
.scrot
should be on your system. To install imagemagick:sudo apt-get install imagemagick
-
Copy the script into an empty file
-
By default, images are saved to
~/scrot_images
, named:outputfile_1.png
,outputfile_2.png
etc. . Change it if you want, as marked in the script. Note that if you change the diretory, you have to use the full path. -
Save the file to
~/bin
(create the directory if needed) asscrot_extended
(no extension) and make it executable. -
Log out and back in and take your screenshot with the command:
scrot_extended <x> <y> <width> <height>
Example:
scrot_extended 100 100 400 400
outputfile:
The script
#!/usr/bin/env python
import subprocess
import os
import sys
# setting default directories / filenames
home = os.environ["HOME"]
temp = home+"/"+".scrot_images"
img_in = temp+"/in.png"
# if you prefer, you can change the two line below:
output_directory = home+"/"+"scrot_images" # output directory
filename = "outputfile" # filename
# creating needed directories
for dr in [temp, output_directory]:
if not os.path.exists(dr):
os.mkdir(dr)
# creating filename (-number) to prevent overwriting previous shots
n = 1
while True:
img_out = output_directory+"/"+filename+"_"+str(n)+".png"
if os.path.exists(img_out):
n = n+1
else:
break
# reading arguments,arranging commands to perform
coords = sys.argv[1:5]
cmd1 = ["scrot", img_in]
cmd2 = ["convert", img_in, "-crop", coords[2]+"x"+coords[3]+"+"+coords[0]+"+"+coords[1], "+repage", img_out]
# Take screnshot, crop image
for cmd in [cmd1, cmd2]:
subprocess.call(cmd)
Using maim
Overview
maim
(make image) is a new screenshot utility that is designed as an improved version of scrot
.
One of the many new features maim
comes with is the support for setting a screen capture area right from the CLI. The syntax works as follows:
maim -x <x-coordinate> -y <y-coordinate> -w <width> -h <height>
e.g.:
maim -x 100 -y 100 -w 400 -h 400
Installation
maim
hasn't arrived in the official repositories, yet, and isn't part of any PPA, either. You will have to compile it from source in order to install it.
After making sure that all dependencies are satisfied...
sudo apt-get install build-essential cmake
sudo apt-get install libimlib2-dev libxrandr-dev libxfixes-dev
...we can proceed with the actual compilation and installation:
git clone https://github.com/naelstrof/maim.git
cd maim
cmake ./
make && sudo make install
That's it. You should now be able to call maim
from your terminal. Please make sure to check out the documentation (maim --help
) for all available options; and check out slop
, a utility by the same developer that allows you to interactively select the area of the screen capture.
The current version of scrot does have the ability to screenshot a defined rectangle off the screen.
scrot --autoselect '1,2,3,4' outfile.png
# screenshot the rectangle at 1,2 with 3 width and 4 height
Naturally, you would replace 1,2 with the x,y pixel coordinates of the rectangle you want. So x,y would be the upper left pixel of the rectangle you desire.
also see this answer for instructions on how to get the current mouse coordinates from a bash script