Captura de pantalla
Presentación
A continuación veremos un pequeño script basado en las herramientas de
ImageMagic para realizar capturas de pantalla (completas o parciales), además para agregar un marco y una anotación (la fecha para ser más precisos)
Además pone en practica una utilidad llamada
Xdialog (
creación de ventanas de dialogo simples) que te da la posibilidad de configurar algunas variables del script.
Requerimientos
Nota: Bajo Gnomo, existe un equivalente a Xdialog llamado
Zenity
También existe
Kdialog bajo KDE.
Sintaxis
screenshot.sh [<setup>]
Uso
La primera vez, ejecuta el script con el parámetro “
setup” para configurar el directorio de destino, el prefijo de tus capturas así como la extensión.
screenshot.sh setup
Una vez definidas las variables, podrás llamar el script desde la línea de comandos, o desde tu escritorio o desde la barra de tareas.
Una primera ventana de dialogo te informará que después de que la cierres tendrás un plazo de 3 segundos (
puede ser configurado en el script) para elegir el escritorio en el que se va a hacer la captura.
Cuando aparezca el cursor de ImageMagic (
en forma de cruz), haz clic en la ventana a capturar (
o el escritorio) o dibuja un cuadrado o rectángulo (
arrastrando el ratón manteniendo presionado el botón izquierdo de éste).
De este modo será creada una imagen y su doble con una anotación en el directorio definido durante el setup.
Podrás volver a definir la configuración en cualquier momento ejecutando nuevamente el “setup”. O modificando las variables manualmente.
Código fuente
#! /bin/bash
# @(#)
# @(#) screenshot 17/06/2007
# @(#) versión 0.1 - autor: JP
# @(#)
# @(#) screenshot es un pequeño programa de captura de pantalla basado en
# @(#) ImageMagic y recurriendo a Xdialog
# @(#)
# @(#) uso: screenshot [< setup >]
# @(#)
### Function setup ###
function setup {
# Borrado de los valores antes de iniciar
sed -i '/^#A$/,/^#Z$/ s|^DIRECTORIO=.*| DIRECTORIO=|' $0
sed -i '/^#A$/,/^#Z$/ s|^NOM_IMAGEN=.*|NOM_IMAGEN=|' $0
sed -i '/^#A$/,/^#Z$/ s|^EXT=.*|EXT=|' $0
# Elección del directorio
DIRECTORIO=$(Xdialog --stdout --title "Directorio" --dselect "$HOME" 0 0)
#Recuperacion del codigo de retorno
RETVAL="$?"
# Test variable vacía. Si si, inicia con valor predeterminado
if [ -z "${DIRECTORIO}" ]
then DIRECTORIO="${HOME}/"
fi
# Test de código de retorno Xdialog (ver doc Xdialog para + info)
#+ Con un código igual a 0 se inicializa la variable DIRECTORIO con el valor proporcionado
#++ En todos los otros casos es inicializada con el valor predeterminado ($HOME)
case "$RETVAL" in
0) sed -i "/^#A$/,/^#Z$/ s|DIRECTORIO=|&\"${DIRECTORIO}\"|" $0
mkdir -p "$DIRECTORIO";;
*) Xdialog --title "Anulación" --msgbox "\nEl directorio predeterminado \n\n$HOME\n\n\
sera utilizado...\n" 10 50
sed -i "/^#A$/,/^#Z$/ s|DIRECTORIO=|&\"$HOME/\"|" $0;;
esac
# Elección nombre
NOM_IMAGE=$(Xdialog --stdout --title "Nombre de la imagen" \
--inputbox "Ingresa un nombre de referencia para las imagenes " 0 0)
RETVAL="$?"
if [ -z "${NOM_IMAGE}" ]
then NOM_IMAGE="capture"
fi
case "$RETVAL" in
0) sed -i "/^#A$/,/^#Z$/ s/NOM_IMAGE=/&\"${NOM_IMAGE}\"/" $0;;
*) Xdialog --title "Anulacion" --msgbox "\nEl nombre genérico predeterminado\n\ncapture\n\n\
será utilizado...\n" 10 50
sed -i "/^#A$/,/^#Z$/ s/NOM_IMAGE=/&\"capture\"/" $0;;
esac
# Eleccion de extension
Xdialog --no-tags --radiolist "Type d'extension" 0 0 7 \
".png" "png - Portable Network Graphic" on \
".jpg" "jpg o jpeg - Joint Photographic Experts Group" off \
".gif" "gif - Graphic Interchange Format" off \
".bmp" "bmp - BitMaP" off \
".tif" "tif o tiff - Tag(ged) Image File Format" off 2>/tmp/radiolist.tmp.$$
RETVAL=$?
EXT=$(cat /tmp/radiolist.tmp.$$)
rm -f /tmp/radiolist.tmp.$$
case $RETVAL in
0) sed -i.4.bak "/^#A$/,/^#Z$/ s/EXT=/&\"${EXT}\"/" $0;;
*) Xdialog --title "Anulacion" --msgbox "\nLa extension generica predeterminada\n\npng\n\n\
sera utilizada...\n" 10 50
sed -i.5.bak "/^#A$/,/^#Z$/ s/EXT=/&\"\.png\"/" $0;;
esac
Xdialog --title "Setup" --msgbox "\nLos siguientes parámetros de configuración han sido actualizados:\
\n\nDIRECTORIO = ${DIRECTORIO}\
\nNombre = ${NOMBRE_IMAGEN}\
\nExtension = ${EXT}\
\n\Nvuelva a ejecutar el script por favor...\
\n\n" 0 0
# El setup ha terminado, salimos del script
exit
}
# Test de la existencia de un parametro (setup)
if [ -n "$1" ]
then
case "$1" in
setup) setup # Parametro presente, se ejecuta la función
;;
*) Xdialog --title "Error" --msgbox "\nEl script solo acepta un parametro\
\nen option.\n\nUsage : screenshot < setup >\n" 0 0
exit
;;
esac
fi
# Se elimina la funcion de la memoria
unset setup
### Declaracion de variables (despues de la ejecucion del setup)
#A
DIRECTORIO=
NOMBRE_IMAGEN=
EXT=
#Z
# Test de la existencia de un archivo conteniendo el valor de la variable ${NOMBRE_IMAGEN}
#+ Si la condicion es verdadera entonces se extrae el numero del contador
#++ para incremetar el contador ($COUNT) de un paso
if [ -e $(ls "${DIRECTORIO}" | egrep \b${NOMBRE_IMAGEN}) ]
then
NUM=$(ls ${DIRECTORIO} | egrep "\b${NOMBRE_IMAGEN}" | sed 's/[^0-9]*//g'| sort -nr | sed 1q)
COUNT=$(expr ${NUM} + 1)
fi
# Ventana de dialogo de ayuda al abrir - Facultativo -
/usr/bin/Xdialog --title "Screenshot"\
--msgbox "Tienes 3 segundos despues de cerrar esta ventana\n\
para elegir el escritorio, o la ventana a poner en primer plano\n\
para hacer la captura de pantalla."\
0 0
# Comando propiamente dicho para la captura, con un tiempo de latancia de 3 segundos
import -pausa 3 ${DIRECTORIO}${NOMBRE_IMAGEN}${COUNT}${EXT}
# Creación de un clon de la imagen e insertando un marco y una anotación exterior
#+ Espesor del marco / Color de fondo / Color del texto / tamaño del texto / Ubicación
#++ Label (aqui la fecha reformateada)/ Archivo original / Archivo de salida
montaje -frame 5 -mattecolor black -fill white -pointsize 14 -geometry +0+0 \
-label "$(date '+%A %e %B %Y %H:%M:%S')" ${DIRECTORIO}${NOMBRE_IMAGEN}${COUNT}${EXT} ${DIRECTORIO}${NOMBRE_IMAGEN}_anotar${COUNT}${EXT}
Screeshots
- Captura parcial con anotación
- Captura parcial con anotación
Enlace de interés
PD: El
artículo original fue escrito por jipicy, contribuidor de
CommentCaMarche