環境
・OS=Windows10
・ブラウザ=Chrome
起きたこと
デジカメで商品写真を撮影し、
PCエクスプローラー上で、横向きになっているjpg画像を縦に変更しました。
この時点で、PC画面上では縦に変更されているように見えます。
ですが、あるシステム(Web上で動く。ブラウザはChromeを使用。)にその画像を登録をすると、
変更前の「横向きの画像」がアップロードされてしまいました。
「縦向き」でアップロードしたいのです。
仮定
なぜでしょうか?
画像ファイルのプロパティを見ると、「サイズ:1728 x 2592」となっています。
縦×横の横が長くなっています。横向きです。
おそらく、画像方向の情報には
①Windows内での見かけの方向の情報
②画像データの大本の方向の情報
の2種類があって、今はこの①のみが変更された状態になっているのだと思います。
原因はexif情報
調べたところ、原因はほぼ仮定通りだとわかりました。
画像データには表示した際に、上になるポジションを情報として持っています。
ややこしいのは、この情報が2つあることです。
(1)従来の画像データの物理的な回転角度の情報。
(2)exifと呼ばれる仮想回転情報です。つまりスマホで撮影した場合、(1)の物理的な回転角度情報は縦置きですが、横にして撮影した場合、(2)の仮想回転情報が横置きとなります。
exifに対応しているスマホや、パソコンでは(2)の仮想回転情報に併せて表示されます。
しかし、多くのブラウザでは(2)の仮想回転情報には対応しておらず、(1)の物理回転情報をもとに表示されます。そのために、スマホでは正しく表示されるのに、投稿すると角度がおかしくなるのです。
ちなみに、windows10で写真を表示する「フォト」で写真を回転させても、(2)の仮想回転情報を変更するだけなので効果がありません。
パソコンで回転させたのに直らないのはこのためです。(引用元:「スマホで撮影した写真を投稿しても正しく上を向かない場合にPHP側で変換する」-Office Obata 2018.12.12記事)
つまり、現状手元の画像は
exif(仮想回転情報)だけが回転していて、
物理的な回転角度の情報が回転していない
ということ。
対処:Ralphaを利用
対処方法として、この「物理的な回転角度の情報」を、プログラミング(PHPやPython)を用いて変更する方法もあるようです。が、今回は視覚的にわかりやすそうな「Ralpha」というフリーソフトを利用することにしました。
「Ralpha」について↓
複数のJPEG/BMP/PNG画像を高品位かつ高速に一括で拡大・縮小できるソフト。リサイズしたいファイルを画面にドラッグ&ドロップして一覧に追加し、サイズを指定するだけのシンプルな操作で手軽に利用できる。
また、拡大・縮小のアルゴリズムとしてLanczos2/3/4と平均画素法を採用すると同時に、各アルゴリズムの演算がMMX/SSE2命令およびマルチスレッドに対応しているため、高品位のLanczosで大量の画像を拡大・縮小しても、処理が高速に完了するのも特長だ。
標準の設定で拡大・縮小を実行すると、リサイズ後の画像はリサイズ前の形式を維持したまま別ファイルとして保存され、Exif情報は消去される。もちろん、拡大・縮小後の画像形式や命名規則、Exif情報の保持などを指定することも可能。
(引用元:窓の社-Ralpha)
上記窓の社からダウンロードし、デスクトップにダウンロードファイル(zipファイル)を移動。
→右クリック
→「すべて展開」をクリック
→「展開」をクリック
→展開したフォルダ内の「Ralpha.exe」をダブルクリック
→ソフトが起動する(下図はソフトの起動画面)
問題発生:どれが該当画像?
exifの方向を訂正した画像ファイルがどれなのか、
PCの画像を保存してあるフォルダから選ぶにはどうすれば良いのでしょうか?
プロパティで確認できるのでしょうか?
画像登録したシステムから該当画像を選ぶには、ファイル数が多くて効率が悪そうです。
PC上で確認する方法はあるのでしょうか?
まず、exifの変更情報を確認するには、
画像ファイルを右クリック
→「プロパティ」をクリック
→「詳細」タブをクリック
→EXIFバージョンの右側に数字が記載されていれば、画像撮影後、何かしらの変更が加えられたということらしいです。私のPCでは「0230」と表示されていました。
因みに、この「詳細」タブの下側「プロパティや個人情報を削除」をクリックし、
「このファイルから次のプロパティを削除(R)」を選択し、
「EXIFバージョン 0230」の左側のボックスにチェックを入れて
「OK」をクリックすると、
EXIF情報が削除されるようです。
(参考:「画像の縦横が変になった!どうしよう!をプロパティから解決する。」-ReBlo 2019.10.21記事)
余談:exifバージョンに記載されていた「0230」は何の数字なのか気になったので「exif バージョン 0230」等でググったのですが、結局わからず。何の数字なのでしょうか??バージョンだとして、何を表しているのでしょうか?
話を戻します。
画像一覧を「詳細」表示にして、
→列名のあたりで右クリック
→「その他」をクリック
→「EXIFバージョン」のチェックボックスにチェックを入れて「OK」をクリック
するとこのように表示されました。
この状態からEXIFバージョンに「0230」と表示されているファイルだけを選ぼうとして、ふとこれは違うと気づきました。EXIFバージョンには、方向以外の情報も含まれています。
方向を変更した画像以外も、この「0230」が表示されていました。
再検討。
列名のあたりで右クリック
→「その他」をクリック
→「方向」のチェックボックスにチェックを入れて「OK」をクリック
するとこのように表示されました。
「向き」の列に「〇度回転」と表示されたファイルがあります。
それぞれのファイルを開くと、探したかった画像(横転した画像)でした。
一覧の状態で見つけられたーーー!
「〇度回転」と表示されているファイルだけを選んで全て「新規フォルダ」に入れました。
Ralphaの操作
該当の画像ファイルを集めることができたので、画像方向の修正作業に入ります。
Ralphaの最初の画面。
「Exif自動回転」に最初からチェックが付いていた。
これ、おそらく「Exifの情報に合わせて自動で画像の元データも回転にしときますよ」ということだろう。
やってみよう。
「トリミング」「リサイズ」に入っていたチェックを外し、「変換」→「実行」をクリック
すると元の画像ファイルが入っていたフォルダに「Resize」という名前のフォルダが発生。
一覧表示で「向き」を表示させて確認してみると・・・
「270度回転」→「標準」に変更できていました!
このファイルをシステムに登録したところ、表示したかった方向できちんと表示されました。
ホッ。
他の画像ファイルについては一括で同じ作業をして、無事解決できました。
未解決事項
・exifバージョンの「0230」は何を表す数字??
参考
・「スマホで撮影した写真を投稿しても正しく上を向かない場合にPHP側で変換する」-Office Obata 2018.12.12記事
・「画像の縦横が変になった!どうしよう!をプロパティから解決する。」-ReBlo 2019.10.21記事
Qiitaの書き方参考
・Qiita(28)画像の大きさ調整-@kaizen_nagoya さん2021.05.04更新記事