背景
macOSではcmd+shift+ctrl+4
でスクリーンショットをクリップボードに直接保持させることができます。
これを使ってSlackやらNotionやらに直接貼り付ける事がよくあるのですが、データ量が非常に大きいというデメリットがあります。
というのもmacOSでは
- スクリーンショットをクリップボードに保持した際はRAW形式で保存される
- クリップボードからペーストする際はPNG or TIFF形式になる
という設定になっているためです。
なのでちょっとピクセル数が多いと簡単に10MBなどの画像になってしまいます。
画像保存時にjpegにするという以下のコマンドもありますが、
$ defaults write com.apple.screencapture type jpg
これはディレクトリなどに保存するは有効ですが、クリップボードから直接ペーストする時はうまく働きません。
似たような問題にぶつかっている人は多々いますが、どれも解決策までたどり着いていませんでした。
- Can the format of a screenshot-to-clipboa… - Apple Community
- Control-Shift-Command-4 format JPG - Apple Community
- Converting image format in clipboard - Workflow Help & Questions - Alfred App Community Forum
そんな中、Automatorを使うことでやりたいことが”ほぼ”実現できたので紹介します。
設定
大きな方針としては以下です。
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フォルダからアップロードが良さそうです。
まとめ
若干クリップボードにセットされるまでのラグはありますが、ファイルサイズが小さくなったことでスクリーンショットが格段に扱いやすくなりました。