はてなフォトライフの困った仕様
昨日、Microsoft Image Composite Editor - kABok を書くにあたり画像をはてなフォトライフにアップロードしたが、アップロードした画像が上書きされるという現象に遭遇してはまった。後で調べたら、既にはてなアイデアで散々話題になってることだったけどメモしておく。
困った仕様1
フォトライフの設定で「画像の表示順」が「撮影順」(デフォルト)になっていると、Exifに同じ年月日時分秒を撮影日時に持つ画像はフォトライフ上に複数存在できない。同じ撮影日時のファイルがアップロードされた場合、先に存在したファイルは確認すること無く上書きされる。
何でこんなことになっているかというと、アップロードされた画像のファイル名を撮影日時で作っているからだと思われる*1。試しに2123/11/22 12:34:56 という撮影日時を持つファイルを作ってアップロードしたところ、21231122123456.jpg (JPEG 画像, 640x480 px) というファイルが出来た。
この仕様、一人のユーザーに限れば撮影日時はユニークだろうという発想で決めたと思うんだけど、撮影日時は全然ユニークにならない。ユニークにならないケースは色々想定出来るけど、可能性が高くて自分もはまったのが画像を編集してアップロードしようとした時。デジカメで撮影された画像を編集するようなソフトは、編集後の画像に元となった画像のExifをコピーするものが非常に多い。つまり、編集前と編集後の画像は同じ撮影日時を持つことになる。ということは、編集前と編集後の画像は同時にフォトライフにはアップロード出来ないことになり、実際アップロードすると上書きが行われどちらか一つの画像しか存在できない。以下は編集前と編集後のファイルをアップロードしたサンプル。二つの魚拓を見比べると、同じurlで表示される画像の中身が入れ替わっている。
魚拓リスト - http://f.hatena.ne.jp/kobak/21231122123456
困った仕様2
フォトライフの設定「画像の表示順」を変更すると画像の表示順だけでなく、アップロード時のファイル名の作り方も変更される。既に述べたように「撮影順」の時は撮影日時でファイル名を作っているが、「アップロード順」に変更するとアップロードした日時でファイル名が作られるようになる。実は「撮影順」の時も撮影日時の情報が無いファイルについてはアップロードした日時でファイル名が作られているが、「アップロード順」に変更すると撮影日時の情報が存在するファイルでもそれを無視するようになる。
そして不思議なことが起きる。それは「画像の表示順」を再び「撮影順」に戻した時。この時、「アップロード順」の時にアップロードしたファイルは撮影日時の情報が存在しても、アップロード日時を撮影日時として表示が行われてしまう。
どうしてこんなことになるのか。「撮影順」の時にアップロードしたファイルは「アップロード順」に変更した時でも、きちんと並び替えが行われるのに。自分の予想だと撮影日時はファイル名から、アップロード日時はファイル自身のタイムスタンプから取得して並び替え処理を行っているんじゃなかろうかと考えるが実際はどうなんだか。
*1:実態は異なる可能性もあるが、ユーザーから観測出来る挙動として