昨年の4月にデザインの調整ということで、写真の最大サイズを 1024px まで上げていたのですが、これは Google Photos の無料アップロードサイズが長辺 2048px とされていたために、それまでアップロードしてきたものを鑑みつつ高解像度環境を見こんで半分としたものでした。

しかし Google Photos が最大 16MP まで無料アップロード可能となりしばらく16MPでのアップロードも増えてきたので、この度さらに最大サイズを 1600px まで上げました。ウィンドウサイズが 1650px を超えると、サイト全体の横幅が拡大し、photo カテゴリのエントリについては最大1600pxで表示されるようにしました。

現時点では仮対応という感じで、2048px の画像へのリクエストが走ったのちに、JavaScript で s0 (最大サイズ) をロードするようにしています。

画像の大きさ

1650px と中途半端なところでレスポンシブなのは、Retina 13-inch MacBook を「スペースを拡大」設定で使っている場合の横幅が 1680px なので、丁度これぐらいというところにあわせてあります。この日記の最大の読者である自分の環境というわけです。

大きな画像っていうのはそれだけで強い主張があります。かつてあった「体験」を呼び起こす力が画像の大きさと解像度にはあります。そこにいて、そこでこう見たのだという主張のため、とにかく大きいのは正義なのです。

現像環境と閲覧環境とのギャップ

写真は適切な閲覧環境とセットで成立すると思います。大画面で現像した結果をアップロードして縮小した画像を見てみたりすると「何か違うな」と思うわけです。視野に占める画像の大きさと、細かいところが見えるかという要素で、写真への没入感がかなり変わってしまいます。細かいところでいうと、本来出力サイズによってシャープネスのかけかたが変わってきます。

ウェブ公開の場合、閲覧環境をこれと指定することはできません。写真の閲覧に関する体験は閲覧者環境の画面の大きさや発色などの影響されるので、発信者はどこかで諦めるポイントがあります。

4K までのスケールアップ

ついでに 4K モニタ程度までの対応として以下のように transform で scale() をかけて徐々に拡大していくようなメディアクエリを入れてみました。

body {
    transform: scale(2); 
    transform-origin: center top;  
}

これは Chrome や Firefox だと綺麗にいくのですが Safari (10.01) だとなぜかボヤけることがあります。ボヤけないこともあるので、なにかしら条件があると思うのですが、よくわかりませんでした。transform はまだ鬼門かもしれません。

  1. トップ
  2. tech
  3. サイトの画像サイズを再びアップグレード

Google Photos は配信画像は基本的にすべて sRGB でなっています。

そこで ICC のテスト用 jpeg ファイル や、手元でいくつかカラースペースを変えた画像を Google Photos にアップロードしてどうなるか検証してみました。

結果

全ての画像で適切にカラースペースを変換しているようです。Google Photos は v2 でも v4 でもちゃんと認識して sRGB に変換しているようです。

ただし 500px 以上でアップロードした場合、s0 はオリジナルのカラープロファイルがそのまま残っています。また 500px 未満の場合 ICC プロファイルが削除されます。

ちなみに2015年2月ぐらいのPicasaでは元画像にsRGBを無条件に適用して色化けを起こしていました。地味に改善されてるみたいです。

出力のメタデータ

明示的に「オリジナル画像」としてダウンロードしない限りは EXIF などのメタデータ類はすべて削除されます。これは s0 (オリジナルサイズ) も同様です。

オリジナル画像

「オリジナル画像」の URL は Picasa の古いAPI から取得可能です。imgmax=d を指定して画像個別のフィードを取得すると、media:content に含まれています。

URL を知っていればクッキーなしで取得可能なようです。ただし、この画像は必ず Content-Disposition: attachment がついているため、ブラウザでは直接表示できず、ダウンロードするようになっています。

出力画像の ICC プロファイル

やや奇妙な挙動をすることがあって気になっていたので調べてみました。どうもサムネイルサイズによって含まれるかどうかが変わるようです。

  • s320 - なし
  • s480 - なし
  • s499 - なし
  • s500 - sRGB IEC61966-2-1 black scaled
  • s1024 - sRGB IEC61966-2-1 black scaled
  • s0 - オリジナルのプロファイル (ただし EXIFやXMP などは削除)

Google Photos を見ていると、拡大画面とリスト画面で色が変わることがあるのですが、どうやらサイズによってカラープロファイルの有無が変わることが関係していそうです。Google Chrome の場合、画像に ICC プロファイルが含まれていなければカラーマネジメントをしない (sRGB 扱いにしない) ので色が変わることがあります。

s0 はオリジナルプロファイルが適用されるようなので、sRGB 以外でアップロードした場合には使用に注意がいりそうです。

どこかで明示的にアナウンスされているわけではないので、仕様は突然変わったりする可能性はあります。

出力検証のメモ

以下のようにして exiftool で含まれるメタデータを全て確認しました。s0 とか s500 と言っているのは、この URL 中にあるサイズ指定の部分のことです。

$ curl https://lh3.googleusercontent.com/-BDMfJtqE7Mw/WIlEQ29H7II/AAAAAAAAnw0/2ZUwqimJUcQUbiLomaBrvwcrAebJFSjWQCE0/s0/IMG_9415-16MP-AdobeRGB.jpg | exiftool -
$ curl https://lh3.googleusercontent.com/-pEtCDwM8HhQ/WIlEQ5CSwLI/AAAAAAAAnw8/rAyZIkuFVzEk3x68vRLPAkkevHUxEicJQCE0/s2048/IMG_9415-16MP-ProPhotoRGB.jpg | exiftool -
  1. トップ
  2. tech
  3. Google Photos の ICC カラープロファイルの扱い

なんで今まで使っていなかったのか…… と思いました。

前提として、Google Photos はアシスタントを有効にしていると、適当にアップロードするだけで自動的にアルバムを作ってくれます。旅行のときは位置情報も参照してアルバム名も適切に設定されたりします。これは勝手につくってくれて、作ったら勝手に通知がくるので、特に面倒なことは一切ありません。

この状態で、作られたアルバムを共有設定にするだけで、共有相手の Google Photos にも即座に共有され、表示できるようになります。ここまででやることはアルバムの共有設定だけ。

そして実は、共有された側からアルバムを開くと、Google Photos 内にアルバムに追加できそうな写真が自動的にサジェストされて、数タップで追加できます。そうすると共有アルバムで相互に写真共有されます。

旅行とかにいくとお互いにスマフォで撮った写真は端末に別々に保存されてしまうわけですが、Google Photos の共有だと、ほんとにわずかなステップで共有できて便利です。

通知も細かくて、共有設定をしたら相手に通知がいくのはもちろんのこととして、共有したアルバムを開いたときには「見たよ」という通知が返ってきます。

制限

1つのアルバムにつき2000枚までしか追加できないみたいです。通常あんまりひっかからないと思いますが、1つのアルバムに全部つっこんで共有ってのは難しいので、ちゃんと細かい単位でアルバムにしたほうが良いです。粒度的にはアシスタントがやるような感じで、1日1アルバムか、1旅行1アルバムとかになりそうです。

経緯

これまで Dropbox 経由で家族写真を妻と共有するようにしていましたが、容量制限が厳しいので限られた写真しか共有できていませんでした。基本的には Lightroom で厳選して現像したものだけを共有してて、大部分の写真は (共有していないという意味では) 実質的に捨てていたわけです。

一方、基本的に撮った写真は全て Google Photos にアップロードしていました。16MP までは無料ということで特に迷いなくただただアップロードしていただけです。

アルバム機能は知ってはいましたが基本的に無視をしていて、使っていませんでした。なぜ無視をしていたかというと、共有設定しても妻側でちゃんと見れるのかを確かめるのが面倒くさかったからというのがあります。

しかし今や Google Photos は独立サービスになっており、Android の写真バックアップの中心的なアプリケーションになっているわけなので、既に使われており、特に面倒なことはありませんでした。共有設定するだけで何も問題なく通知が飛んで見れる状態になっていました。