今回はsipsコマンドでHEIFからJPEG形式などに画像形式を変換してみます。今回も処理する画像データなとはデスクトップのsampleフォルダです。cd ~/Desktop/sampleとしてカレントディレクトリを移動しておきましょう。もちろん、GUIを使用しない、できない環境や他のディレクトリがよい場合には、状況に応じて処理する画像ファイルがあるディレクトリに移動しておきましょう。なお、今回のコマンド処理はmacOS High Sierra以降でないと動作しません。
HEIFからJPEGへの画像変換
画像形式と言えばJPEGがもっともメジャーでしょう。スマートフォンで撮影した画像もJPEG形式で保存されます。と、長年思っていたのですが、突如JPEGではなく拡張子がHEICという見慣れない、見たこともない画像形式のファイルで保存されていました。調べるとHEICはHEIF形式の拡張子とのこと。HEIFはHigh Efficiency Image Fileを略したもので高画質高圧縮。つまり少ないファイルサイズでも綺麗な画像のままになるという事です。容量の少ないスマートフォンやデバイスでは画像サイズは小さければ小さいほど有利です。
・HEIF (High Efficiency Image File)
https://ja.m.wikipedia.org/wiki/HighEfficiencyImageFileFormat
そう言えば他にもWebPという容量の少ない画像形式もあります。
・WebP
https://ja.wikipedia.org/wiki/WebP
画像形式(フォーマット)は非常に多くの種類があります。アプリケーションごとに画像形式の種類があるだけでなく個人でも自由に作れます。興味がある人は自分でオリジナルの画像形式を考えて作ってみると勉強になりますし、運がよければ他の人が利用するようになるかもしれません。
話がそれてしまいそうなので、元に戻しましょう。 MacだとHEIFはHigh Sierraからサポートされています。iPhone,iPadなどiOSはバージョン11からサポートされています。iOSでは撮影した画像の形式をHEIFにするかJPEGにするかを設定することができます。
Androidだとバージョン9からサポートされているようです。以下の画面はGalaxy S20での設定例です。
HEIFに対応した機種やOSだけで画像ファイルをやりとりするだけならHEIFでもよいでしょう。高画質でファイルサイズも小さいからです。
しかし、WindowsやLinux,FreeBSDや古いMacなど他の環境で、そのままHEIF形式のファイルを渡してしまうと、受け取った側では見ることができません。また、画像を見るだけならよさそうですが、加工したりするとなると現状では対応しているアプリケーションが少ないようです。やはり、デファクトスタンダード(事実上の標準)であるJPEG形式やPNG形式に変換する必要がありそうです。
そんな時にはsipsコマンドの出番です。sipsコマンドを使えば簡単に形式を変換できます。以下の例ではIMG001.HEICファイルがimg001.jpgというJPEG形式のファイルに変換されます。 なお、iPhoneで撮影した画像の拡張子は大文字のHEICになります。iOSはファイル名、拡張子とも大文字ですが、Androidだと小文字になっています。
sips -s format jpeg IMG_0001.HEIC -o img001.jpg
これまでと同様にbash,zshのシェル展開機能を使えばHEIF形式の画像ファイルをまとめてJPEGに変換できます。
以下のようにするとカレントディレクトリにあるHEIF形式の画像をJPEGに変換できます。変換後の画像はサブディレクトリjpgimgに保存されます。
sips -s format jpeg *.HEIC -o ./jpgimg
拡張子が小文字の場合にも対応するには以下のように指定します。これまで何度も出てきた{ }で括る指定方法です。
sips -s format jpeg *.{HEIC,heic} -o ./jpgimg
JPEG以外にも以下の画像形式に変換できます。以下の表はサポートされている主な画像形式です。
jpeg | JPEG形式 |
---|---|
tiff | TIFF形式 |
png | PNG形式 |
gif | Compuserve GIF形式 |
bmp | Windows BMP形式 |
psd | Photoshop形式 |
sipsがサポートしている形式を確認するには--formatsオプションを指定します。sips --formatsと入力すると図のように表示されます。OSのバージョンやsipsのバージョンによって異なると思われます。ここではBigSurでの結果を示しています。
------
Supported Formats:
-------------------------------------------
com.adobe.pdf pdf Writable
com.adobe.photoshop-image psd Writable
com.adobe.raw-image dng
com.apple.atx -- Writable
com.apple.icns icns Writable
com.apple.pict pict
com.canon.cr2-raw-image cr2
com.canon.cr3-raw-image cr3
com.canon.crw-raw-image crw
com.canon.tif-raw-image --
com.compuserve.gif gif Writable
com.dxo.raw-image dxo
com.epson.raw-image erf
com.fuji.raw-image raf
com.hasselblad.3fr-raw-image 3fr
com.hasselblad.fff-raw-image fff
com.ilm.openexr-image exr Writable
com.kodak.raw-image dcr
com.konicaminolta.raw-image mrw
com.leafamerica.raw-image mos
com.leica.raw-image raw
com.leica.rwl-raw-image rwl
com.microsoft.bmp bmp Writable
com.microsoft.cur --
com.microsoft.dds dds Writable
com.microsoft.ico ico Writable
com.nikon.nrw-raw-image nrw
com.nikon.raw-image nef
com.olympus.or-raw-image orf
com.olympus.raw-image orf
com.olympus.sr-raw-image orf
com.panasonic.raw-image raw
com.panasonic.rw2-raw-image rw2
com.pentax.raw-image pef
com.phaseone.raw-image iiq
com.samsung.raw-image srw
com.sgi.sgi-image sgi
com.sony.arw-raw-image arw
com.sony.raw-image srf
com.sony.sr2-raw-image sr2
com.truevision.tga-image tga Writable
org.khronos.astc astc Writable
org.khronos.ktx ktx Writable
org.webmproject.webp webp
public.avci avci
public.heic heic Writable
public.heics heics Writable
public.heif heif
public.jpeg jpeg Writable
public.jpeg-2000 jp2 Writable
public.mpo-image mpo
public.pbm pbm Writable
public.png png Writable
public.pvr pvr Writable
public.radiance pic
public.tiff tiff Writable
-----
フォーマットと拡張子の右側にWritableという文字がありますが、この文字がある形式は書き出しが可能という意味です。例えばJPEGは書き出しできますが、WebPやDNG形式は書き出せないことになります。
ちなみに以前やったPortable BitMap、GrayMap、PixelMapもサポートされています。—formatsではPBMと表示されていますが、実際に変換してみるとフルカラー形式のPixelMapつまりPPM形式で出力されます。
以下のようにするとHEIC形式の画像をPPM形式に変換できます。
sips -s format pbm IMG_0001.HEIC -o img001.ppm
実際に変換されたファイルを確認すると以下のようにPPM形式になっています。sipsコマンドを利用すればテキストエディタでPPM形式で画像を作成し一般的なJPEG,PNG形式に簡単できることになります。
P3
# 8-bit ppm - RGB
3024 4032
255
202 177 155 202 177 155 201 176 153 203 175 153 202 174 152 205 177 155 207 180 158 207
180 158 206 178 156 201 172 150 197 168 146 197 168 146 201 172 150 203 174 152 205 176
154 208 179 157 211 182 160 215 186 164 217 188 166 218 189 167 220 192 170 221 193 171
221 196 173 224 199 176 224 199 176 221 196 173 221 199 175 226 204 180 230 211 186 238
変換可能な形式を確認するとJPEGからHEICにも変換できる事がわかります。以下のようにすると、カレントディレクトリにあるJPEG形式をHEIC形式に変換します。
sips -s format heic *.jpg -o ./
JPEG画像の圧縮率を指定して変換する
JPEG形式に変換する場合には圧縮率を変える事ができます。JPEG形式が登場する前の画像形式は可逆圧縮が基本でしたが、JPEG形式からは非可逆圧縮でファイルサイズとのトレードとなっています。なお、あまり知られていないようですが、JPEG形式は可逆圧縮もできます。
sipsコマンドでもJPEG形式の圧縮率を指定して保存することができます。この場合、formatOptionsを使います。formatOptionsの後に圧縮率を示す0〜100の数値を指定します。以下のようにするとカレントディレクトリにあるJPEG画像(拡張子jpgのみ)を圧縮率20%でサブディレクトリjpeg20に保存します。
sips -s format jpeg -s formatOptions 20 *.jpg -o ./jpeg20
圧縮率で指定する数値が小さければ画質は悪くなります。数値が大きければ画質は良くなりますが、ファイルサイズは大きくなります。formatOptionsオプションの値をいろいろ変えて圧縮率とファイルサイズがどう変換するか、興味がある人はやってみてください。