Google Photo 側の設定は「高画質」ではなく「元の画質」が選択されており、
しかも Android 側で 16MP に満たない (13.0MP 3120x4160 133kB の) 画像をアップロードしているにも関わらず、
Google Photo にアップロードされた画像を確認してみると 0.7MP 720x1000 133.5KB とか
地味にデグレードされたファイルに変換されてしまうという謎現象が発生。
全て Office Lens で撮影した jpg ファイルなんだけど、詳しく調べてみると以下のような状況だった。
Office Lens の解像度 | Google Photo (アプリ)の表示 | Google Photo (ブラウザ)の表示 | ImageMagick の表示 |
---|
13.0M | (4160x3120) | | 13.0MP | 3120x4160 | 133KB | 0.7MP | 720x1000 | 133.5KB | 720x1000 133492B |
8.3M | (3840x2160) | | 8.3MP | 2160x3840 | 133KB | 0.7MP | 720x1006 | 133.3KB | 720x1006 133301B |
8.0M | (3264x2448) | | 8.0MP | 2448x3264 | 122KB | 0.7MP | 720x1005 | 122.2KB | 720x1005 122200B |
7.7M | (3200x2400) | | 7.7MP | 3200x2400 | 813KB | 7.7MP | 2343x3277 | 813KB | 2343x3277 813145B |
5.0M | (2592x1944) | | 5.0MP | 2592x1944 | 544KB | 5MP | 1897x2655 | 544.2KB | 1897x2655 544241B |
4.1M | (2688x1512) | (規定) | 4.1MP | 1512x2688 | 130KB | 0.7MP | 720x1010 | 130.1KB | 720x1010 130108B |
3.1M | (2048x1536) | | 3.1MP | 1536x2048 | 130KB | 0.7MP | 720x1009 | 130.2KB | 720x1009 130172B |
2.1M | (1920x1080) | | 2.1MP | 1080x1920 | 126KB | 0.7MP | 720x1006 | 126KB | 720x1006 126041B |
当初、Google Photo の不具合を疑い
507SH, Android One 上の Android アプリ版 Google Photo と
PC の ブラウザ版 Google Photo の information 表示を比べて眺めていた段階では、
傾向としてファイルサイズが一定のサイズ以下だと 0.7MP にデグレードされてるっぽい感じがしていた。
しかし、と言うか、そもそも、Office Lens での撮影結果を見た際、
7.7M (3200x2400) と 5.0M (2592x1944) 以外の解像度がすべて 130KB 前後のファイルサイズになっているのは、
かなりおかしい気がするというか、
道理で、規定の 4.1MP から最高画質であるはずの 13.0MP にしても、画質が改善されないわけだ。
更に、A4 サイズを撮影しているのに、
Office Lens における撮影時の解像度と撮影結果の解像度が一致しているというは、
仮に引き延ばされているのだとしても、
A4 のアスペクト比は 297x210mm で 99:70(1.414) なのだから、
撮影時のアスペクト比 4:3(1.333) または 16:9(1.778) になってしまっているのはどう考えてもおかしい。
あまりにもおかし過ぎるので、
USB ケーブルで MTP 接続して直接 PC に引っ張り出して来て、
ImageMagick の identify コマンドで調べてみた結果が上記の表の右端。
衝撃的過ぎると言うか、
そもそも Android アプリの Google Photo の information 表示がおかしくて、
クラウド上の Google Photo を web ブラウザで information 表示した結果は、
PC に取り出したローカルのファイルとも一致しており、
実は何の問題がなかったという落ちである。
つまり、そもそもの問題は何かと言うと、
Office Lens が規定の解像度である 4.1M (2688x1512) はもとより、
7.7M (3200x2400) と 5.0M (2592x1944) の 2 つを除いたすべての解像度において、
スキャン結果をすべて 0.7MP 前後の解像度で保存してしまっているというのが根本的な原因であった。
つまり、指定した解像度を完全に無視していると言うか、
ぶっちゃけ、解像度の指定周りの処理がまともに行われているとは到底思えない状況である。
衝撃的な事実だな、これは。 orz
それはさて置き、不思議極まるのは、
Android アプリ版の Google Photo の information 表示で示される解像度だ。
これは明らかに Office Lens の撮影時に指定した解像度が表示されているのだが、
Windows の explorer のファイルのプロパティをはじめとして、
多くのソフトではこの情報を確認することが出来ない。
おそらく Exif に含まれているはずなんだけど、
単純に
ExifTool を使ってみても、
$ exiftool "2018_05_18 10_18 Office Lens (1).jpg"|grep -Ei "res|size|wid|hei"
File Size : 130 kB
Resolution Unit : None
X Resolution : 1
Y Resolution : 1
Image Width : 720
Image Height : 1000
Image Size : 720x1000
のように、それらしき情報が見当たらず、
一体どこから引っ張って来てるんだよ!?って状況。
unknown なタグを表示するためのオプションである -u とか -U とかを付けても出て来ないのでしばらく悩んだのだが、
-X オプションを付けてみたところ、ようやく当該のメタデータを見つけることが出来た。
$ exiftool -X "2018_05_18 10_18 Office Lens (1).jpg"|grep -Ei "res|size|wid|hei"
<System:FileSize>130 kB</System:FileSize>
<File:ImageWidth>720</File:ImageWidth>
<File:ImageHeight>1000</File:ImageHeight>
<IFD0:ImageWidth>3120</IFD0:ImageWidth>
<IFD0:ImageHeight>4160</IFD0:ImageHeight>
<JFIF:ResolutionUnit>None</JFIF:ResolutionUnit>
<JFIF:XResolution>1</JFIF:XResolution>
<JFIF:YResolution>1</JFIF:YResolution>
<Composite:ImageSize>720x1000</Composite:ImageSize>
これはどうも ImageWidth と ImageHeight が File と IFD0 のグループで重複しているため IDF0 のグループの値が表示されないらしい。
重複したタグも表示するための -a オプションを用いても表示出来るようだが、
そのままだとグループが併記されず少し分かり難いため -G オプションを併用するのが良さげである。
$ exiftool -a -G "2018_05_18 10_18 Office Lens (1).jpg"|grep -Ei "res|size|wid|hei"
[File] File Size : 130 kB
[File] Image Width : 720
[File] Image Height : 1000
[EXIF] Image Width : 3120
[EXIF] Image Height : 4160
[JFIF] Resolution Unit : None
[JFIF] X Resolution : 1
[JFIF] Y Resolution : 1
[Composite] Image Size : 720x1000
あと、撮影結果のアスペクト比が
- 2655x1897 (1.400)
- 3277x2343 (1.399)
- 1000x720 (1.389)
なのも気にならないわけではないが、
これは A4 のアスペクト比に対して 0.9901%〜1.768% 程度の誤差なので
トリミングの精度を考えると、流石に許容範囲だろうか?