automatizza lo screenshot di salvataggio (già negli Appunti) in un file in bash [duplicato]

4

Lavoro sulla linea di comando un bel po 'e spesso devo fare uno screenshot su una regione dello schermo e salvarlo nella directory in cui sto attualmente lavorando.

(supponiamo di aver già preso lo screenshot e gli appunti ce l'hanno).

Questo è il modo in cui devo farlo adesso (dopo avere lo screenshot negli appunti):

  1. Avvia anteprima.
  2. in Anteprima, ⌘ + N ( File, nuovo dagli appunti ) crea un nuovo file con i contenuti degli appunti.
  3. torna alla riga di comando e copia il nome della directory (copia i risultati di pwd )
  4. vai a Anteprima, ⌘ + S per Salva . Digitare / per ricevere una richiesta di navigazione nella directory in cui posso incollare il nome della directory dal passaggio 3.
  5. Infine, assegna il nome del file effettivo, this_is_where_I_get_the_error.png nel mio esempio.

Mi piacerebbe farlo invece:

$savemyscreenshot ./this_is_where_I_get_the_error.png

Come faccio a scrivere quel comando savemyscreenshot ? In bash ? Come uno script di Automator (che deve essere richiamabile dal Terminale, altrimenti che sconfigge un po 'lo scopo)?

A parità di condizioni, preferiremmo leggermente il sapore javascript dello script di Automator su AppleScript.

env: MacOS Sierra

    
posta JL Peyret 13.12.2017 - 21:33
fonte

3 risposte

1

screencapture è uno strumento CLI integrato in macOS per la cattura di schermate, in / usr / sbin / screencapture.

Per fare uno screenshot e salvarlo su screenshot.png:

screencapture -x screenshot.png

Per eseguire lo screenshot di una regione, puoi utilizzare -R , dove x, y sono le coordinate in alto a sinistra e w, h è larghezza e altezza dell'acquisizione.

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

Per scegliere in modo interattivo una regione, usa -i

screencapture -i screenshot.png
    
risposta data 13.12.2017 - 21:37
fonte
0

Modifica: per commenti, questa risposta non ha funzionato. Sembra che l'ultima volta che qualcuno ha chiesto a qualcun altro di scrivere un'utilità per questo: Qual è il modo più rapido per ottenere un grafico negli appunti salvato su disco? in particolare questa risposta

La risposta originale segue

Dovrebbe esserci un comando terminale "pbpaste" che è possibile reindirizzare a un file. Quindi se hai dati di immagine negli appunti pbpaste > my_img.png dovrebbe fare il trucco.

    
risposta data 13.12.2017 - 22:02
fonte
0

Prima di continuare, permettetemi di scusarmi: so che avete espresso una leggera preferenza per Javascript su AppleScript. Tuttavia, il mio Javascript è pantaloni, mentre so già come farlo usando quest'ultimo, e sicuramente fornisce un modo per ottenere i dati di immagine dagli appunti direttamente dalla riga di comando.

Il seguente one-liner (distribuito su quattro righe solo per facilità di lettura) prenderà l'immagine dagli appunti e la salverà in un file con il nome impostato come data e ora correnti, che si trova nella tua attuale directory di lavoro:

    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\"})"

Se scegli di utilizzare questo metodo, ti suggerisco di creare un alias / funzione per racchiuderlo all'interno, che puoi chiamare semplicemente digitando il nome della funzione +/- un parametro se vuoi specificare il nome del file manualmente (con un piccolo aggiustamento alla parte finale del comando precedente dove viene dichiarato il nome del file).

EDIT: sono andato avanti e ho scritto uno script di shell che fa tutto questo per te:

    #!/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\"})"

Questo può essere copiato e incollato in un file di testo semplice chiamato "SaveMyScreenshot", reso eseguibile eseguendo il comando chmod +x /path/to/SaveMyScreenshot in Terminale , quindi spostato in una delle directory specificate in $PATH (Io uso / usr / local / bin ).

Da quel momento in poi, puoi semplicemente digitare SaveMyScreenshot come faresti con qualsiasi altro comando in Terminale .

P.S. Non dimenticare di commentare o eliminare la riga nello script che prende lo screenshot ( screencapture -c ). Credo che tu abbia il tuo metodo preferito per ottenere il tuo screenshot e lo inserisco solo per i miei scopi di test e per completezza nel caso in cui qualcun altro possa trovare questa risposta utile in un contesto più generale.

    
risposta data 22.12.2017 - 04:24
fonte

Leggi altre domande sui tag