「GEGL/GEGLの基礎」の編集履歴(バックアップ)一覧に戻る

GEGL/GEGLの基礎 - (2008/04/01 (火) 02:02:45) の編集履歴(バックアップ)


GEGLの基礎

はじめに

GEGLは次期GIMPの画像操作のコアとなるライブラリです。
GEGLはたくさんの色空間への対応、編集をあとから何回でも調節できる非破壊編集などの特徴を備えています。

が、GEGLはこれまでの一般的な画像操作ライブラリとはかなり考え方が異なる構造になっています。

勉強ついでに、GEGLがどういうものかを自分でわかった範囲でまとめてみたいと思います。

GEGLことはじめ

普通、画像を操作するライブラリでは「画像データ」と「画像データに対するフィルタなどの操作」が中心になります。
ライブラリにとって、
  • 画像データにいかに効率的にアクセスできるか
  • 汎用的なアルゴリズムが描けるか
  • アンドゥのメモリを効果的に削減できているか
などが重要な点になります。

しかし、GEGLはすでにここから考え方が違います。GEGLでは「画像データ」はライブラリを使う人には見せません。
「画像データに対する操作」だけを見せます。
イメージ的には、script-fuを使うのに似ています。ライブラリのユーザはscript-fu(見たいなデータ構造)を作ってGEGLに渡しておき、
あとで結果を見たくなったときに、GEGLに描画要求を出します。
GEGLは描画要求があったときにデータを見て画像に操作を加えます。描画結果を適当な1枚の画像に書き出したり、ファイルに保存したりします。
この操作はすべてオンデマンドで実行されます。もしかすると、毎回全体の絵を再描画するかもしれませんし、一度加工した結果を
キャッシュとして保存しておいて高速に表示するかもしれません。ライブラリのユーザはそのポリシーを決めることは出来ません。
すべてGEGLに任されています。

ライブラリのユーザは、ちょうどgimpに対してscript-fuとpluginを書くのと同じように、GEGLに対してGEGLNodeとGEGLOperationを作って使います。
GEGLNodeはDAG(有向非循環グラフ)と呼ばれるデータ構造です。DAGは木構造と似ていますが、複数のノードが1つの子ノード、親ノードを共有しても良い点が異なります。
GEGLNodeは画像データに対する変更操作(Operation)を表すグラフです。複雑な構造を持った変更履歴と考えることもできます。
GEGLのオペレーションは、Source/Filter/Composer/Sinkの4つが基本となっています。
  • Source
    • Sourceはファイルや他の画像データを画像にロードする操作です。
  • Filter
    • Filterはその名のとおり、画像に対するフィルタです。"input"から渡された画像に加工をして"output"に結果の画像を渡します。
  • Composer(合成)
    • 2つの画像を合成する操作です。"input"と"aux"から渡された画像を合成して"output"に結果の画像を渡します。GEGLでは、レイヤーも数ある合成操作の1つとしてみなされます。
  • Sink
    • 加工した画像をファイルや他の画像データにセーブする操作です。

それぞれのオペレーションはパイプラインのように数珠つなぎにすることが出来ます。
通常は、Sourceオペレーションでデータを読み出してFilter/Composerで変更し、Sinkオペレーションでデータを書き出します。
例えばこんな感じです。