Zanim przejdę dalej, pozwól mi przeprosić: wiem, że wyraziłeś lekką preferencję dla Javascript w AppleScript. Jednak mój Javascript to spodnie, a ja już wiem, jak to zrobić za pomocą tego drugiego i zdecydowanie zapewnia on jeden sposób na uzyskanie danych obrazu ze schowka bezpośrednio z wiersza poleceń.
Następujący jeden linijka (rozłożona na cztery wiersze tylko w celu ułatwienia czytania) spowoduje pobranie obrazu ze schowka i zapisanie go w pliku o nazwie ustawionej jako bieżąca data i godzina, znajdującym się w bieżącym katalogu roboczym:
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\"})"
Jeśli zdecydujesz się skorzystać z tej metody, sugeruję utworzenie aliasu / funkcji w celu zawinięcia jej w środku, co możesz następnie wywołać, wpisując nazwę funkcji +/- parametr, jeśli chcesz określić nazwę pliku ręcznie (za pomocą małe ulepszenie ostatniej części powyższego polecenia, w którym deklarowana jest nazwa pliku).
EDYTOWAĆ: Poszedłem do przodu i napisałem skrypt powłoki, który robi to za ciebie:
#!/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\"})"
Można go skopiować i wkleić do zwykłego pliku tekstowego o nazwie „SaveMyScreenshot”, wykonanego przez uruchomienie polecenia chmod +x /path/to/SaveMyScreenshot
w Terminal , a następnie przeniósł się do jednego z katalogów określonych w $PATH
(Używam / usr / local / bin ).
Od tego momentu możesz po prostu wpisać SaveMyScreenshot
jak każde inne polecenie Terminal .
P.S. Nie zapomnij skomentować lub usunąć wiersz w skrypcie, który wykonuje zrzut ekranu ( screencapture -c
). Uważam, że masz własną, preferowaną metodę uzyskiwania zrzutu ekranu, a ja wrzucam to tylko do własnych celów testowych i dla kompletności w przypadku, gdyby ktoś inny mógł uznać tę odpowiedź za przydatną w bardziej ogólnym kontekście.