[小ネタ] 主に HEIC 対策を目的として、画像ファイルを右クリックから JPEG に変換する Quick Action を作る #macOS

最近 iPhone を買い換えたんですが、AirDrop で Mac へ持ってくると画像が変なんです。JPEG じゃないんです。HEIF に罪はないんですが、ここは Automation をつかって簡単に JPEG を作らさせてもらおうと思います。副産物として sips と pngquant も活用できるようにします。
2019.10.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

最近の iPhone (といっても iPhone 7 / iOS11 以降なのでそこそこ年月が経っていますが)で撮影すると、通常は HEIF という形式(拡張子 .HEIC)で保存されます。これはこれで良いのですが、Mac に AirDrop で転送して加工してブログに載せよう、となったときに、そのままだとちょっと面倒です。

ところでぼくは、以前このようなブログ記事を書きました。

macOS 標準添付「Automator」で、右クリックから画像を一括リサイズする環境を手に入れる | DevelopersIO

同じようにして、 Automator を使って HEIF / HEIC 画像ファイルを Finder で右クリックから JPEG に変換 するクイックアクションを作成しましたのでご紹介します。

手順 1

Automator の具体的な使い方は以前から変わっていませんので、上述のブログをご参照ください。
ただ現在は「サービス」ではなく「クイックアクション」という名称に変更されていますので、そこだけ読み替えてください。

できあがったクイックアクションのフローはこちらです。

今回は拡張子が変わるため、特にファイル名に suffix を付けたりといったことはしていません。
これで、画像を右クリック(コンテキストメニュー表示)にて変換するメニューが完成しました。

手順 2 (高品質変換)

上述の方法だと、JPEG Quality は概ね 75% 程度で固定されてしまう模様です(コントロールするオプションはありません)。

もうちょっと良い画質で変換したい場合は、macOS には sips (Scriptable image processing system) というコマンドがあるのでそちらを Automator のシェルスクリプトアクションから呼び出してあげればよさそうです。

実際のコードはこんな感じです。4 行目はファイル名から拡張子部分を抜いて、代わりに .jpg を付けてます。

for infile in "$@"
do
	# 拡張子付け替え
	outfile="${infile%\.?*}.jpg"

	# sips コマンドでフォーマット変換(Quality 85%)
	/usr/bin/sips -s format jpeg -s formatOptions 85 "$infile" --out "$outfile"
done

もっと画質が良い方が良い、ということであれば、7 行目の 85 という数字を 100 までの間でコントロールしてみてください(もちろんその分ファイルサイズは大きめになります)。
また、 sips のオプションについては MAN ページを参照するか、ググって頂けますと幸いです。

sips MAN page - macOS - SS64.com

なおこの方法は、ファイルの上書きについて何の考慮もしていませんので、実行にあたってはご注意ください!

上書きによってデータが破損した場合でも補償は出来ませんのでご了承下さい。

まとめ

もちろん個々に挙げた内容は、ターミナルを使っても簡単に実行できます。

ただ macOS の Automator を使えば、そういった作業を Finder から実行できるので便利ですね。

おまけ

シェルスクリプト実行のアクションを使えば、pngquant をつかった PNG の最適化も Finder から実行できてしまいます。

コードはこちら。 pngquant は複数のファイルをいっぺんに渡せるので簡単ですね。

/usr/local/bin/pngquant -- "$@"

pngquant についてはこちらの記事が詳しいです。ぜひご参照ください。

[小ネタ] pngquantを使って指定したディレクトリ内のPNG画像のサイズを小さくしてみた