Carpe Diem

備忘録

macOSのスクリーンショットをJPEGでクリップボードに保持させる

背景

macOSではcmd+shift+ctrl+4スクリーンショットクリップボードに直接保持させることができます。

これを使ってSlackやらNotionやらに直接貼り付ける事がよくあるのですが、データ量が非常に大きいというデメリットがあります。

というのもmacOSでは

という設定になっているためです。
なのでちょっとピクセル数が多いと簡単に10MBなどの画像になってしまいます。

画像保存時にjpegにするという以下のコマンドもありますが、

$ defaults write com.apple.screencapture type jpg

これはディレクトリなどに保存するは有効ですが、クリップボードから直接ペーストする時はうまく働きません。

似たような問題にぶつかっている人は多々いますが、どれも解決策までたどり着いていませんでした。

そんな中、Automatorを使うことでやりたいことが”ほぼ”実現できたので紹介します。

設定

大きな方針としては以下です。

  1. cmd+shift+4スクリーンショットをフォルダに保存する
  2. 保存形式をJPEGにする
  3. フォルダにAutomatorを設定し、スクリーンショットjpeg画像としてクリップボードにセットする

1. スクリーンショットをフォルダに保存する

cmd+shift+5をすると、オプション設定できるスクリーンショット画面になります。

そこでその他の場所...を選んで適当なフォルダを用意します。

僕の場合はピクチャ>screenshotsというディレクトリにしました。

2. 保存形式をJPEGにする

これは最初に書いたものと同じです。

$ defaults write com.apple.screencapture type jpg

またデフォルトだとスクリーンショットのprefixが付くので、それを無くして日付だけにしたい場合は以下を実行します。

$ defaults write com.apple.screencapture name ""

3. フォルダにAutomatorを設定する

AlfredやSpotlightなどからAutomatorを起動し、

新規作成をクリック

フォルダアクションを選択し、

対象としたいディレクトリを選択します。今回だと先程のピクチャ>screenshotsになります。

左のアクション一覧からAppleScriptを実行を右側のカラムにドラッグ&ドロップします。

デフォルトのスクリプトを削除し、以下のスクリプトを入力します。

on run {input, parameters}
    set filePath to item 1 of input as text
    set the clipboard to (read (filePath as alias) as TIFF picture)
end run

入力したら保存して完了です。

動作確認

cmd+shift+4スクリーンショットを撮ってみます。

すると2〜3秒後にクリップボードにimageファイルが追加されます。

ファイルサイズもcmd+shift+ctrl+4のRAWに比べ段違いに小さいです。

その他

フローティングサムネイルを消す

デフォルトではcmd+shift+4すると右下にフローティングサムネイルが出てきます。

それが邪魔な場合はcmd+shift+5のオプションからOFFにすることができます。

ScriptにJPEG指定すると逆にファイルサイズが増える

先程スクリプトではTIFFとしてファイルをreadするようにしていました。

on run {input, parameters}
    set filePath to item 1 of input as text
    set the clipboard to (read (filePath as alias) as TIFF picture)
end run

別の参考元ではJPEGとして扱うようなスクリプトがあり、直感的にはこちらの方が正しそうなのですが、こちらを使ってみると何故かファイルサイズがこれまで同様に大きくなってしまいました。

on run {input, parameters}
    set thisFile to item 1 of input
    set the clipboard to (read thisFile as JPEG picture)
end run

ref: Screenshot to Clipboard as JPG/PNG not TIFF (big filesize) · Issue #3362 · iina/iina · GitHub

クリップボードからペーストするとjpegにならない

前述のTIFFとしてファイルをreadする、のためなのか分かりませんが、クリップボードにはRAWとして保持されているため、例えばGitHubのコメントなどにペーストするとpngファイルとしてUploadされました。

もちろんcmd+shift+ctrl+4の時よりは小さいのですが、screenshotsフォルダにjpegとして保存されているファイルの方がやはり小さいので、ファイルサイズを少しでも小さくしたい場合はクリップボードでなくscreenshotsフォルダからアップロードが良さそうです。

まとめ

若干クリップボードにセットされるまでのラグはありますが、ファイルサイズが小さくなったことでスクリーンショットが格段に扱いやすくなりました。

参考