質問: Identiconというキルト模様の画像をIPや名前から作るAPIがあります。例えば、このサイトに登録した時の初期アイコンがそれです(GravatarのAPIだそうです)。 そこで質問なのですが、GravatarなどのAPIではどのようにして名前から画像を作っているのでしょうか?
回答: 実装例がインターネット上にたくさんありますので、経験のある言語での実装をご覧いただくと理解が早いと思いますが、3x3のパターンを持つ実装について、共通する部分を抽象的に列挙すると次のようになります。 1. 名前やメールアドレスなどの可変長の入力を受けて、ハッシュ関数など一方向関数で固定長のデータを得る。 2. 1で得たデータから適当な部分を取り出して、a)描画色、b)中央の描画パターン、c)四隅の描画パターン、d)残り部分の描画パターン、を決定する。 3. パターンに基づき画像を描画し出力する。 たとえば使用する色を24bitとして、描画パターンを16種類(4bit)用意しておくとすれば必要なデータ量は`24(a) + 4 x 3(b,c,d) = 36bit`となります。 ただし一般に使われているハッシュ関数などは出力がもっと長いので(たとえばMD5は128bit)、データを余らせず結果をばらけさせるために、描画パターンの反転(するかしないか1bit)だったり、様々な模様を得るために描画パターンの追加、あるいはマス目の増加などを施してより複雑な模様を描画しています。