sipsコマンドでheic画像を別形式に一括変換する
.heicの画像をに別フォーマットに変換する必要があったため、シェルスクリプトを書きました。heic画像を格納したディレクトリで実行すれば同名のjpg画像を新たに保存します。macがサポートしているsips
コマンドを使用しているため、他OSでは使用できません。
for file in `ls *.heic`; do filename=${file%.*} sips --setProperty format jpeg $file --out ${filename}.jpg done
format
にはtiff, png, gif, bmp等も指定できます。
補足説明あれこれ
sipsコマンド
scriptable image processing systemの略で、簡単な画像処理ならコマンドで実施できます。よく使いそうなコマンドは以下で大体紹介されています。
--getProperty (-g) 画像情報取得
画像情報の取得。sips -g <keys> <filename>
と指定します。all
をkeyに指定するとすべての情報が得られます。試しにallで取得すると以下のような結果が得られます。
hoge@MBP home $ sips -g all IMG_4070.heic /Users/hoge/home/IMG_4070.heic pixelWidth: 4032 pixelHeight: 3024 typeIdentifier: public.heic format: heic formatOptions: default dpiWidth: 72.000 dpiHeight: 72.000 samplesPerPixel: 3 bitsPerSample: 8 hasAlpha: no space: RGB profile: Display P3 creation: 2020:09:24 13:07:28 make: Apple model: iPhone 8 software: 13.7
撮影したデバイスやiOSのバージョンまで取得できるのは意外です。上記の情報を個別にkeyに指定することもできます。
--setProperty (-s) 画像変換
冒頭のように画像フォーマットを変換したり、画像のメタ情報をセットしたりできます。ただし、撮影日時(creation)やiOSバージョン(software)などread-onlyな情報も存在します。
試しにmodelの情報をいじってみます。
hoge@MBP home % sips -s model iphone13 IMG_4070.heic /Users/hoge/home/IMG_4070.heic /Users/hoge/home/IMG_4070.heic hoge@MBP home % sips -g all IMG_4070.heic /Users/hoge/home/IMG_4070.heic pixelWidth: 4032 pixelHeight: 3024 typeIdentifier: public.heic format: heic formatOptions: default dpiWidth: 72.000 dpiHeight: 72.000 samplesPerPixel: 3 bitsPerSample: 8 hasAlpha: no space: RGB profile: Display P3 creation: 2020:09:24 13:07:28 make: Apple model: iphone13 software: 13.7
無事(?)iphone13で撮影した画像ができました。
--out (-o) 別名で出力
出力ファイルを別名で保存します。指定しなければ上書きされます。
--cropToHeighWidth (-c) 切り出し
画像をクロップします。sips -c <pixelH> <pixelW> <filename>
と指定しますが、元画像の中心を指定したサイズで切り出します。
-z アスペクト比を変えてリサイズ
sips -z <pixelH> <pixelW> <filename>
でリサイズできます。アスペクト比は変わります。
-Z アスペクト比を維持してリサイズ
sips -Z <pixelWH> <filename>
と指定します。アスペクト比を変えず、幅または高さが指定したサイズ以下になるようにリサイズします。
--flip (-f) 画像フリップ
sips -f horizontal <filename>
で水平フリップ、sips -f vertical <filename>
で垂直フリップができます。
代替手段
sipsコマンド以外では、ImageMagickを利用する方法があります。
Linux, Windows, Macだけでなく、iOSやAndroidにもサポートされているフリーソフトです。多くの画像処理機能をサポートしており、heic画像の変換もできます。詳細は以下。
ただし、ImageMagickには多数の脆弱性が報告されているようです。個人で画像処理を行う分には問題はなさそうですが、アプリケーションに搭載するときには注意が必要そうです。
まとめ
heicを任意の形式に変換はできましたが、むしろiphoneで撮影したheic画像をpcに取り込むほうが大変ですね・・・mac OS Catalinaからは写真アプリ内のオリジナルの画像ファイルを取り出すのが難しくなったようです。
画像を大量に扱う場合はwindowsで頑張ってファイルコピーするか、クラウドストレージにちまちま移して別端末で取り出すか・・・。