automatizar guardando la captura de pantalla (ya en el portapapeles) en un archivo en bash [duplicar]

4

Trabajo bastante en la línea de comandos y, a menudo, tengo que tomar una captura de pantalla de una región de la pantalla y guardarla en el directorio en el que estoy trabajando.

(supongamos que ya he tomado la captura de pantalla y la tiene en el portapapeles).

Así es como tengo que hacerlo ahora (después de tener la captura de pantalla en el portapapeles):

  1. inicia la vista previa.
  2. en Vista previa, ⌘ + N ( Archivo, Nuevo desde el portapapeles ) crea un nuevo archivo con el contenido del portapapeles.
  3. vuelva a la línea de comandos y copie el nombre del directorio (copie los resultados de pwd )
  4. vaya a Vista previa, + S para Guardar . El tipo / me muestra un indicador de navegación del directorio donde puedo pegar el nombre de mi directorio desde el paso 3.
  5. Finalmente, indique el nombre del archivo real, this_is_where_I_get_the_error.png en mi ejemplo.

Me gustaría hacer esto en su lugar:

$savemyscreenshot ./this_is_where_I_get_the_error.png

¿Cómo podría escribir el comando savemyscreenshot ? En bash ? ¿Como una secuencia de comandos de Automator (que debe ser invocable desde la Terminal, de lo contrario se pierde el propósito)?

En igualdad de condiciones, preferiríamos un poco el sabor de javascript de la secuencia de comandos Automator sobre AppleScript.

env: MacOS Sierra

    
pregunta JL Peyret 13.12.2017 - 21:33

3 respuestas

1

screencapture es una herramienta CLI integrada en macOS para tomar capturas de pantalla, en / usr / sbin / screencapture.

Para tomar una captura de pantalla y guardarla en screenshot.png:

screencapture -x screenshot.png

Para realizar una captura de pantalla de una región, puedes usar -R , donde x, y son las coordenadas de la parte superior izquierda yw, h es el ancho y el alto de la captura.

screencapture -x -Rx,y,w,h /path/to/capture.png

Para elegir interactivamente una región, use -i

screencapture -i screenshot.png
    
respondido por el grg 13.12.2017 - 21:37
0

Editar: según los comentarios, esta respuesta no funcionó. Parece que la última vez que alguien preguntó esto, alguien más escribió una utilidad para ello: ¿Cuál es la forma más rápida de guardar un gráfico en el portapapeles guardado en el disco? específicamente esta respuesta

La respuesta original sigue

Debe haber un comando de terminal "pbpaste" que puede redirigir a un archivo. Entonces, si tienes datos de imagen en tu portapapeles, pbpaste > my_img.png debería hacer el truco.

    
respondido por el moneyt 13.12.2017 - 22:02
0

Antes de continuar, permítame disculparme: sé que expresó una ligera preferencia por Javascript sobre AppleScript. Sin embargo, mi Javascript es pantalón, aunque ya sé cómo hacerlo utilizando este último, y definitivamente proporciona una forma de obtener datos de imágenes desde el portapapeles directamente desde la línea de comandos.

La siguiente frase (repartida en cuatro líneas solo para facilitar la lectura) tomará la imagen del portapapeles y la guardará en un archivo con el nombre establecido como fecha y hora actual, ubicado en su directorio de trabajo actual:

    osascript -e "tell application \"System Events\" to ¬
        write (the clipboard as JPEG picture) to ¬
        (make new file at folder \"$(pwd)\" with properties ¬
        {name:\"$(date +%Y-%m-%d\ at\ %H.%M.%S).jpg\"})"

Si elige usar este método mío, sugiero crear un alias / función para envolverlo dentro, al que puede llamar simplemente escribiendo el nombre de la función +/- un parámetro si desea especificar el nombre de archivo manualmente (con un pequeño ajuste a la parte final del comando anterior donde se declara el nombre de archivo).

EDITAR: Seguí adelante y escribí un script de shell que hace todo esto por ti:

    #!/bin/bash
    # Filename: SaveMyScreenshot (executable)
    # Author: CK 2017
    # ----------------------------------------------------
    # Takes a screenshot to the clipboard then saves the
    # clipboard image to a file in jpeg format.
    #
    # Usage: SaveMyScreenshot [[path/]filename]
    #
    # If no filename is specified, the image will be saved
    # to the present working directory and named using the
    # current date and time.  If more than one argument is
    # given, all but the first argument are ignored.
    #
    # e.g.
    #
    # SaveMyScreenshot
    #
    # SaveMyScreenshot ~/Desktop
    #
    # SaveMyScreenshot ~/Desktop/foo.jpg
    # ----------------------------------------------------

    screencapture -c

    folder=$(pwd)
    filename=$(date +%Y-%m-%d\ at\ %H.%M.%S).jpg

    if [ $# -ne 0 ]; then
        if [[ -d $1 ]]; then
            if [ "$1" != "." ]; then folder=$1; fi
        else
            a=$(dirname "$1")    
            b=$(basename "$1" .jpg)

            if [ "$b" != "" ]; then filename=$b.jpg; fi

            if [ "$a" != "." ]; then folder=$a; fi
        fi
    fi

    osascript -e "tell application \"System Events\" to ¬
            write (the clipboard as JPEG picture) to ¬
            (make new file at folder \"$folder\" ¬
            with properties {name:\"$filename\"})"

Esto se puede copiar y pegar en un archivo de texto plano llamado "SaveMyScreenshot", ejecutable ejecutando el comando chmod +x /path/to/SaveMyScreenshot en Terminal , y luego moviéndolo a uno de los directorios especificados en $PATH (Yo uso / usr / local / bin ).

A partir de entonces, simplemente puede escribir SaveMyScreenshot como lo haría con cualquier otro comando en Terminal .

P.S. No olvide comentar o eliminar la línea en el script que toma la captura de pantalla ( screencapture -c ). Creo que tiene su propio método preferido para obtener su captura de pantalla, y solo lo puse para mis propios fines de prueba y para que esté completo en caso de que alguien más encuentre útil esta respuesta en un contexto más general.

    
respondido por el CJK 22.12.2017 - 04:24

Lea otras preguntas en las etiquetas