GPSwalking

JPEG画像の向きについて

「清水北山好会」のサイトに会員さんがアップしてくる画像の縦画像が時々横に倒れたままになっていることがある。ホームページ担当者になっているので、その都度正しい向きに修正してアップしています。

投稿してくれる会員さんがどのような手順でデジカメの画像をパソコンに落としているのか詳しいことは分かりませんが、投稿は私が作成した投稿ツール(M-tool)を使って投稿されているようです。私も時々投稿していますがそうした不具合に遭遇したことがないので、他の会員さんがアップしたものは何故縦画像が倒れたままになっているのか、その経緯が良く分からなかったので、Exif情報の仕組みについてネットで調べたみました。その結果は下記の通り。

■ ExifのOrientationの値

Orientation
の値
補正方法原画
8枚とも同じ画像
修正後の画像補正後の画像の
行と列の位置
文字の
状態
1補正しない0番目の行が上
0番目の列が左
正常
2左右反転0番目の行が上
0番目の列が右
鏡像
3180度回転0番目の行が下
0番目の列が右
正常
4上下反転0番目の行が下
0番目の列が左
鏡像
5左右反転して
時計周りに
90度回転
0番目の行が左
0番目の列が上
鏡像
6時計周りに
90度回転
0番目の行が右
0番目の列が上
正常
7左右反転して
時計周りに
270度回転
0番目の行が右
0番目の列が下
鏡像
8時計周りに
270度回転
0番目の行が左
0番目の列が下
正常

上記の「原画」はカメラを90度回転して、縦画像を撮影した場合を想定しています。具体的にはExifのOrientationの値が6番の場合を想定してカメラを90度回転して撮影しました。カメラから出力された画像は「原画」のような向きになっています。

画像の向き(Orientationの値)は、理論的には上の表のように8種類ありますが、一般的な画像の向きは、薄い緑色を付けた「1」「3」「6」「8」の4種類です。
一般的には撮影時のカメラの向きに起因するわけですから、カメラを正対した場合の他、90度回転、180度回転、270度回転して撮影する以外はあり得ません。これらの画像は縦横の違いはあっても、文字が鏡像になることはありません。
一方、Orientationの値が「2」「4」「5」「7」の場合は、文字が鏡像になっていて向きを変えただけでは読むことが困難です。これは鏡に映した被写体を撮影した場合や、加工中に発生することが考えられます。昔のフィルムをフィルムスキャナーでデジタル化する場合にフィルムの裏表を間違えて「裏焼」した場合にも発生します。いずれにしても特殊な場合で、デジカメの向きで、これらの画像が撮影されるケースはありませんから、Orientationの値「2, 4, 5, 7」がExif情報として記録されることはないと思います。

今回テストに使用したカメラは、Canon PowerShot S5IS、Canon PowerShot G7XⅡ、Canon PowerShot SX740HS、スマホarrowsM03、の4台ですが、Canonの3台はカメラを逆さ(180度回転)にして撮影した 3番の場合は、Orientationの値として「3」が記録されるのではなく、正対して撮影した 1番の場合(補正なし)と同じOrientationの値「1」が記録されるらしく、PC画面には逆さの画像が表示されます。(6番と8番の場合は、そのまま「6」「8」と記録されるらしい)
これに対してスマホの場合はどの角度に回転して撮影しても上下が正しい位置の画像が表示されました。(1,3,6,8の値がそのまま記録されるらしい)

■ 参考にしたサイト

http://dqn.sakusakutto.jp/2009/02/jpegexiforientaion.html
https://at.sachi-web.com/blog-entry-804.html

さて、以上の予備知識を元に、アップした縦画像が横に寝てしまう原因を考えてみました。
先ず、投稿ツール(SKS-tool)は、セキュリティ上の配慮からExif情報を削除してアップしています。
従って投稿者が縦画像だと思って投稿した画像が横に寝てしまう直接的な原因は、投稿した画像がもともと横に寝ているためだと思います。(SKS-toolは縮小およびExifの削除はしますが、その他の加工はしていません)

では何故、投稿者が縦画像だと思った画像が横画像としてアップされるのか? それは

■ パソコン画面に表示された画像と画像本来の向きが違うことが原因

  1. デジカメの中では画像はCMOS自体に縦に写っている訳ではなく、CMOSには縦・横の区別はなく、CMOSの長辺と短辺を最大限利用する形で、すべて同じように写っている。これはフィルム時代から変わりはない。
  2. 縦横を判断するのは、最終的には人間が画像を見て判断していますが、昔のように印画紙に焼き付けた場合は、縦画像は印画紙を縦にして見ますし、横画像は横にして見ました。それで何も不都合はありませんでした。
  3. ところがデジカメ画像は印画紙に焼き付けることは少なく、ディスプレーで見る機会が多いので、印画紙のように容易に縦にしたり横にしたりできなくなりました。
  4. そのため縦画像はディスプレーで縦表示しないと見にくいということになりました。(画像の回転操作が必要)
  5. この回転操作を自動化するため、最近のデジカメやスマホには重力センサーが付いていて、Exif 情報に撮影時のカメラの向きを記録し自動で回転表示する機能がある。
  6. その情報は、Exif の Orientation の値として記録される。(上記の表参照)
  7. パソコン画面に「縦画像」として表示されている画像には、2種類ある。
    a. Exif 情報によって90度 or -90度回転して表示している場合
    b. 画像そのものが縦画像に修正してありExif情報に依存していない場合
  8. 上の 7-a の場合は、Exif 情報を削除すると90度回転して表示することができなくなり、元の横に倒れた画像に戻ってしまう。
    7-b の場合は Exif 情報が削除されても回転が戻ってしまうことはない。

そこで、この縦・横の問題はどのようにして発生するのか、私が投稿している記事の元画像を見てみることにしました。
現在の Windows10 に添付されているピクチャツール「フォト」で表示しても、縦画像はすべて縦に表示しているため、Exif 情報に基づいて縦に表示しているのか、元々縦画像に直してあるのかの区別はつかない。
そこでネットからダウンロードしたExif情報を読み取る ExifReader で Exif を見てみました。その結果は下記の通り。

Exif情報によって縦表示の場合

サムネイルは倒れている
Orientationの値:6(右下)
縦に加工したソフトウェア:なし

画像そのものが縦画像の場合①

サムネイルも縦表示
Orientationの値:1(左上)
縦に加工したソフトウェア:Microsoft Windows Photo Viewer

画像そのものが縦画像の場合②

サムネイルも縦表示
Orientationの値:1(左上)
縦に加工したソフトウェア:Adobe PhotoShop Elements

横画像の場合

サムネイルも横表示
Orientationの値:1(左上)
縦に加工したソフトウェア:なし

私のパソコン内には、縦表示される画像は上の表のように1番から3番まで3種類あることが分かりました。
この内、実際にホームページにアップしてある縦画像は 2番または 3番だけで、Exif 情報で縦表示している 1番の画像は使っていませんでした。

今回分かったことは、Windows付属のビュワーで縦画像を自動で回転表示するようになったのはWindows8 からだそうです。

https://kaede.jp/2015/05/07011215.html
http://happyhiro.com/wp4dev/tips/diff_windows10_7explorer_img.html

すっかり忘れていましたが、それ以前のWindows7 までは自動で回転せず、手動で回転していたようです。Windows7 のビュワーは Microsoft Windows Photo Viewer を使っていましたから、この場合、表示を90度回転して縦表示にすると Exif が書き換えられていたようです。(https://srad.jp/~kineko/journal/510364/

つまり、Windows7 以前は、自分が投稿しようと思った画像は Microsoft Windows Photo Viewer を使って手動で縦画像に直していたことになります。この時、意識していなくても、縦にした画像が正画像として保存され Exif も書き換えられていたということのようです。そういうこととは知らずに便利に使っていました。

■ アップした縦画像が横に倒れる原因と対策

Windows8 以降のOS付属のビュワーは、Exif の Orientation の値に従って、画像を自動回転して表示すると共に、ユーザーが知らない内に Exifを書き換えることはしなくなったようです。
そのため Windows8 以降は縦画像が縦に表示されているからと安心して、そのまま M-tool に通してアップロードすると、Exif 情報が削除されるため、縦画像の回転が戻ってしまって横に倒れることになる、ということが判明しました。

原因が分かったので対処法を考えてみた。

  1. 投稿ツール(M-tool)にExif のOrientationの値が 1以外の値の場合は、画像方向を回転して正常に表示されるよう加工する機能を追加する。しかし、これはなかなかハードルが高く、直ぐにはできない。
  2. PhotoShop や ペイントなど画像加工ソフトで縦表示に表示した状態で保存する。(これでExif は1に書き換えられる)
  3. Windows7に標準添付されていた Windows Photo Viewer を使う。(Windows10 にもインストールされているが、使えないようになっている。使うためには下記を参考にレジストリを変更する必要がある。これもややハードルは高い。
    https://i-bitzedge.com/tips/how-to-use-windows-photo-viewer-in-windows-10
  4. Windows10 のビュワー「フォト」を使う。
    a) 色や明るさ、傾きなどを修正して「保存」する
    b) 修正する必要がない画像の場合は「クロップと回転」を選択し、何も操作しないまま「保存」する
    この何れかの操作で、縦位置を正画像として保存し、Exif 情報も1に書き換えられる。

ということで、4番の Windows10 のビュワー「フォト」を使って「保存」をクリックするのが最も簡単だということが分かりました。