TL;DR
クリップボードにも、フォルダにもファイルとしてスクショが保存されるAutomatorのアプリケーションを作成した。ファイル名は20220626-162858.jpg
のように時刻にする。
手順
Mac標準アプリのAutomatorを開く。
シェルスクリプトを実行
でコードをコピペ。(スクショを保存するフォルダが/Users/$USER/scaptureの場合)
var="$(date "+%Y%m%d-%H%M%S").jpg"
screencapture -i -x -t jpg "/Users/$USER/sccapture/$var"
echo "$var"
もう一つシェルスクリプトを実行
で以下。引数として
にすることに注意。
var=$1
echo $var
osascript << EOF
tell application "Finder"
set aRes to exists of POSIX file "/Users/$USER/sccapture/$var"
if aRes
set the clipboard to (read alias POSIX file "/Users/$USER/sccapture/$var" as TIFF picture)
end if
end tell
EOF
今回は、⌘+shift+コントロール+4
と同じことをコマンドで実行している。
creencaptureコマンドのオプション
-i
インタラクティブモード
-W
全画面モード
-m
メインモニタの画面のみ撮影
-c
クリップボードに保存
-x
ミュート
-t
ファイルフォーマットを指定。-t jpg
でjpg指定
全画面でキャプチャしたいなら
var="/Users/$USER/sccapture/$(date "+%Y%m%d-%H%M%S").jpg"
screencapture -m -c -x -t jpg $var
echo "$var"
ウィンドウのみをキャプチャしたいなら
var="$(date "+%Y%m%d-%H%M%S").jpg"
screencapture -W -o -x -t jpg "/Users/$USER/sccapture/$var"
echo "$var"
cf) 色々いじりたい人 https://tcd-theme.com/2020/12/screen-shots-without-the-shadow.html
osascript
以降はAppleScriptを実行。クリップボードにあるJPEG画像をファイルとして保存する。
アプリケーションを保存する。
あとは、dockに保存されたアプリケーションを入れておいてクリックするか、BetterTouchToolでショートカットを割り当てるなりして使う。
詰まっていたポイント
以前のコードでは、まずscreencapture -c
でクリップボードに画像をコピーしておいてそれをフォルダに貼り付けるというようにしていた。
この順番では、アプリを呼び出してescしたときにいくつかのデータを期待されるタイプに変換できません
というアラートが出てしまっていた。
var="/Users/$USER/sccapture/$(date "+%Y%m%d-%H%M%S").jpg"
screencapture -m -c -x -t jpg $var
osascript << EOF
set jpg_data to the clipboard as JPEG picture
set the_file to open for access POSIX path of (POSIX file "$var") with write permission
write jpg_data to the_file
close access the_file
EOF
今回は、-c
オプションをなくし、まずフォルダに保存させておいてから画像ファイルにアクセスしてそれをクリップボードにコピーする順番にした。そうするとスクショを撮らなかったときにアラートが出なくなった。
最後に
意外とクリップボードにもファイルとしても保存したいことが多かったので便利。消音なのも良い。
https://github.com/kentoak/screencapture