macOSでスクリーンショット撮影後に自動的に画像ファイルを圧縮する

撮影したスクリーンショットを、ブログ等の用途で掲載したいことがあります。取得したスクリーンショットをそのままアップロードするとサイズが大きく、閲覧者の負担やWebページの表示に時間がかかります。アップロードの事前に、画像を圧縮してファイルサイズを小さくしておくことが推奨されます。

多数の画像圧縮ツールが用意されていますが、スクリーンショットの枚数が大きくなると、毎回手動で実行するのはなかなかの手間です。そこで、「フォルダアクション」を利用して、フォルダにファイルが保存されたことを契機に、自動的に画像が圧縮されるようにしてみました。

前提条件

  • スクリーンショットの形式は、PNG(デフォルト)とします
  • スクリーンショットを保存するフォルダは、既に作成されているものとします(スクリーンショットの保存先は、「スクリーンショット.app」のオプションで指定することが可能です)
  • パッケージ管理ツールである「Homebrew」が既にインストールされているものとします

事前準備

自動化するために、Homebrewから必要なパッケージをインストールしておきます。

brew install pngquant
brew install zopfli

pngquant」は、PNGファイルの非可逆圧縮ツール、「zopfli」は新しい圧縮アルゴリズムを採用したGoogleの圧縮ツールです。共に、CLIから利用可能なコマンドラインユーティリティです。どちらか一方でも構わないのですが、併用することで画質をなるべく落とすことなく、サイズを極限まで削り落とせます。

フォルダアクションの作成

「Automator.app」を使用して、「フォルダアクション」を作成します。

「フォルダアクション」に関する説明です。

“フォルダアクション”は、Finder内のフォルダに関連付けられるワークフローです。フォルダに項目が追加されるとワークフローが実行され、その項目がワークフローの入力として使用されます。

ワークフローという言葉が分かりづらいですが、アクションの一連の流れ、すなわち自動化です。「フォルダアクション」という言葉の意味する通り、フォルダにファイルが作成、保存されたタイミングで自動的に実行されます。

ポイントは、2点のみです。

  1. スクリーンショットが保存されるフォルダを指定する
  2. シェルスクリプトとして実行しますが、「入力の引き渡し方法」として「引数として」を指定する

シェルスクリプトには、以下の内容を記載します。

for f in "$@"
do
  /usr/local/bin/pngquant 64 --skip-if-larger --strip --ext=.png --force "$f"
  /usr/local/bin/zopflipng -y "$f" "$f"
done

画質やサイズに難ありの場合、pngquantのパラメータである「64」を上下してみてください。


comments powered by Disqus