見出し画像

【技術メモ】HEICファイルの回転処理

HEICは、おもにiPhoneなどAppleのデバイスで利用できる画像フォーマットで、JPEGより高効率で画像を圧縮できます(同じ画質ならばファイルサイズを小さくできます)。ふとしたことから、HEICファイルの回転処理について調べたのでメモしておきます。

HEIFファイルの回転パラメータ

JPEGファイルではExifという規格で、画像の本体データとは別に、その画像の向きを記録しています。そのため画像を回転させるには、画像の本体データを再処理する代わりにExifだけを書き換えることで、画像を劣化させずに回転させることができます。Exifに記録される画像の向き(Orientation)の詳細はこちらを参照してください。

一方HEICファイルでは、ExifのOrientationとは別に、Rotationというパラメータを持っています。このパラメータはQuickTimeに由来するものです。つまりHEICファイルには、回転に関するパラメータが2種類(ExifのOrientationとQuickTimeのRotation)存在することになります。

画像回転ツールの処理

MacやWindowsでは、画像ファイルを選択して画像を回転できます。この操作をHEICファイルに行ったとき、前述の2種類のパラメータはどうなるかを実際に調べたところ、使用するツールによって処理が異なりました。

  • Mac(Finder)で回転すると、QuickTimeのRotationとExifのOrientationの両方を(指定した回転に対応するよう)変更します。

  • Windows(Explorer)で回転すると、QuickTimeのRotationを変更しつつ、ExifのOrientationは変更しません。

  • Windowsのフォトアプリで回転すると、QuickTimeのRotationを変更しつつ、ExifのOrientationは削除します。

こう見ると、2種類のパラメータ両方を正しく変更するMac(Finder)が最も堅実な動作といえます。Windowsのフォトアプリは、2種類も回転パラメータがあると誤解を招くから1個消してしまおうということでしょうか。Windows(Explorer)は、RotationとOrientationで異なる回転が指定されることになり、もっとも誤解を招きやすいと考えられます。

画像表示ツールの処理

一方で、画像を表示する側の処理はどうでしょうか。ここでは「Amazon Photos」と「Google Photos」の例を挙げます。
Amazon PhotosではExifのOrientationを優先して参照し、なければQuickTimeのRotationを参照して画面の向きを決定している様子です。一方Google PhotosではExifのOrientationのみを参照し、QuickTimeのRotationは参照していない様子です。

そのため、(OrientationとRotationの両方を正しく修正する)Mac以外で回転したHEICファイルをWebサービスにアップロードすると、ローカルでの表示とWebサービスでの表示で回転が異なる事態が発生しえます。

まとめ

  • HEICには画像回転のパラメータがExif(Orientation)とQuickTime(Rotation)の2種類存在する

  • 画像回転ツール、画像表示ツールの実装により、2種類のどちらを変更・参照するかが異なる

  • そのため、ツールの組み合わせによっては意図した回転で表示されないことがある

おまけ

画像に設定されたExifなどのデータを参照・更新するには、「ExifTool」が便利です。

この記事が気に入ったらサポートをしてみませんか?