gimpでのカラーマネジメントを理解したい

前回、スナップショットを撮るときに一つ困った事があった。

MacではCommand+Shift+4で任意の範囲のスナップショットを撮って、pngファイルを作成する事ができる(なお、古いバージョンのMac OS XだとPDFになったりする。また、表にはない設定をいじることで別の形式にしたりもできる)。

で、このpngファイルをgimpで開こうとすると、カラープロファイルがどうのというダイアログが出て、変換するかしないかを求められる。こんなの。

ここで変換するにしろしないにしろ、開いた画像の色が微妙に異なり、なんだか白っぽくなっている。

原因はgimpカラーマネジメント機能によるもの。というか後からわかる事だけれども、単に設定をちゃんとしてないのが根本の原因。カラーマネジメントをoffにすればいいのだけれども、それでは負けた気がする。勝ちたい。

カラーマネジメントの基礎

まず、「カラーマネジメント」をGoogleで検索して上の方のサイトをいくつか見て、理解したつもりになった。

MacではカラーマネジメントがOSレベルで提供されており(ColorSync)、だいたいのアプリケーションもそれに従っている。プロファイルが埋め込まれた画像をプレビュー.appとかで見ると、埋め込みプロファイルで指定されたカラースペースを、モニタのプロファイルで指定されたカラースペースに変換して表示する、ということのようだ。

モニタのプロファイルは、Macの場合であればだいたい自動的に設定されているが、ディスプレイキャリブレータ.appを使ってユーザーが設定することもできる(Leopard以前はシステム環境設定のディスプレイとかからできたような)。

Windowsはあんまり使わないので後から考える。

現象の確認

まず、冒頭で起きた現象を単純な画像で再現してみる。

埋め込みなし画像での確認

#0000ff(青)で埋めた画像を作成。Macのアプリケーションで作るとカラーマネジメントされてしまう可能性があるので、PIL(Python Imaging Library)で作成した。こんな感じ?

import PIL.Image

img = PIL.Image.new("RGB", (256, 256), (0, 0, 255))
if img:
    img.save("test.png")

これでプロファイルが埋め込まれていないpngファイルが作成できた。

なお、画像の埋め込みプロファイルは、プレビュー.appのインスペクタ(古いバージョンだと情報を見るとか)で確認できる。

また、画面上の色の情報を得るには、アプリケーション/ユーティリティの中にあるDigitalColor Meter.appを使うと便利。

以降、DigitalColor Meter.appで採取した色を「表示色」、データに記録されている色を「データ色」と呼ぶ。なお、データ色の取得はPILを使ってこんな感じ。

import PIL.Image

img = PIL.Image.open("test.png")
if img:
    print "%02x%02x%02x" % img.getpixel((0, 0))

で、出来上がったtest.pngをプレビュー.appで開いても、gimpで開いても、表示色は#0000ffとなる。データ色ももちろん#0000ff。ここまではカラーマネジメントがまったく絡んでないのでこれで問題なし。

スナップショットでの確認

次にtest.pngをプレビュー.appで表示した状態でスナップショットを撮る。

データ色は間違いなく#0000ffとなっており、プレビュー.appでの表示色も#0000ffとなっている。

プレビュー.appでプロファイルを確認すると、「カラーLCD」となっていた。これはMac側のディスプレイ設定で指定しているプロファイル(環境によって名前とかは違うけど)。
つまり、少なくともLeopardでは、スナップショットにはディスプレイのプロファイルが埋め込まれることがわかった。

さて、これをgimpで開こうとすると変換ダイアログがでた。

前はよくわからなかったが、カラーマネジメントについて理解したつもりになった今は、「開こうとしている画像の埋め込みプロファイルと、gimpでの編集用のプロファイルが異なるが、編集用のプロファイルに変換するか?」という意味だとわかる。

変換した場合

gimp上での表示色は#003bf7となっている。スポイトツールで色を採取しても同じ。つまり、#0000ffはgimpの編集用のプロファイルでは#003bf7に変換されるということ。

これを別名保存としてプレビュー.appで確認すると、埋め込みプロファイルが「sRGB IEC61966-2.1」になっている。表示色は#1104feとなり、データ色は#003bf7になっている。sRGBでの#003bf7はモニタのプロファイルでは#1104feに対応するということ。

変換しない場合

gimp上での表示色は#003bf7となっている。ところが、スポイトツールで採取すると#0000ffとなる。つまり、表示だけgimpの編集用プロファイルに変換されている。これに最初に気づいておくべきだった。

これを別名保存した場合は、埋め込みプロファイルはモニタのプロファイルのままになっており、表示色もデータ色も#0000ffとなった。つまり、冒頭のスナップショットの問題では「変換しない」を指定して、表示色を気にせずに編集して保存すればまったく問題なかったということだった。

ただ、色調補正とかの場合はこのままではまずい。ちゃんとgimpカラーマネジメントを使えるようにしたい。続く。

ここまでのまとめ

表示とかはこんな感じ。左から順に

  • スナップショットをプレビュー.appで表示
  • スナップショットをgimpで表示(変換なし)
  • スナップショットをgimpで表示(変換あり/表示上は変換なしと変わらない)
  • スナップショットをgimpで変換後保存しプレビュー.appで表示