mieki256's diary



2016/04/06(水) [n年前の日記]

#1 [gimp] GIMPのMathMapについて分かったことをメモ

GIMP(フリーで使える画像編集ツール)に追加できるプラグインの中に、MathMap というものがあって。簡単なスクリプトを書くとフィルタ処理ができるプラグインなのだけど。

_「MathMap」
_The MathMap Image Processing Application

その、MathMap用のスクリプトの書き方が、ちょっとだけ分かってきたのでメモ。

英語が読める人は、公式サイトのドキュメントを読んだほうが早いだろうけど。

_The MathMap Language Tutorial
_The MathMap Language Reference Manual

MathMapのタブの種類。 :

GIMPを起動して MathMap を開くと(フィルタ → 汎用 → MathMap)、プレビューウインドウの右に、5つのタブが並んでる。
  • Expression ... スクリプトを書いていく場所。
  • Setting ... MathMapの処理に関わってくるオプション指定。アンチエイリアスや、画像の端を繰り返す、等。
  • User Values ... フィルタによっては入力パラメータを必要とするものがある。その入力項目が表示される場所。
  • Filters ... 登録済みのフィルタ(MathMapのスクリプト)が並んでる。フィルタ名をクリックすると、スクリプトが Load されて、Expressionタブに開かれる。
  • Composer ... 複数のフィルタを組み合わせて実行する際に使う。左側でフィルタ名をクリックすると右側に追加されて、フィルタの「out」から、別フィルタの「in」にドラッグすると、フィルタを組み合わせることができるらしい。

とりあえず、Epressionタブの中でスクリプトを書いて、Save As... で保存して、次回使う時は Filtersタブから選ぶ、みたいな感じになるのだと思う。

スクリプトを保存すると、拡張子が .mm になって保存される。

Windows環境だと、保存した際に改行コードがおかしくなるっぽい。ちゃんと書けたはずなのに、saveボタンを押したら「parseできねーよ」とエラーが出たら、大体は改行コードが妙なことになってる。その場合は、別途エディタを使ってスクリプトを書いて、改行コードを LF にして保存して、MathMap で Load したほうがトラブルが起きにくいかもしれない。

スクリプトの基本。 :

画像に対するフィルタ処理のスクリプトは、以下のような感じ。
filter hogefugapiyo(image in)

    in(xy:[x, y * 2])

end
  • filter フィルタ名(image in) 〜 end で、フィルタを定義。
  • (image in) は、画像を入力して処理しますよ、という記述。
  • in(xy:[x, y]) は、(x,y)座標の位置にドットを書く際、[x, y]の位置を参照せよ、てな関係を書いていく。

例えば、前述の in(xy:[x, y * 2]) で処理をした場合、y方向が半分になった画像が得られる。y を2倍してるのに、どうして半分に縮小されるのか、ちょっと分かりづらいだろうか…。
  • y=2 の位置にドットを描くなら、y * 2 = 4 の位置からドットの色を拾ってきて描く。
  • y=4 なら、y * 2 = 8 の位置から拾ってくる。
  • y = 100 なら、 y * 2 = 200 の位置から拾ってくる。

とりあえず、[x, y] のあたりを好きなように書き換えて、Preview を押してみればなんとなく分かってくるかも。

座標系。 :

横が x軸、縦が y軸。画像の真ん中が(0,0)で、左下が (-1, -1)、右上が (+1, +1)、らしい。たぶん。

_The MathMap Language Tutorial に座標の解説図が載ってるので、ソレを見たほうが分かりやすいかも。

画像サイズの取得その他。 :

  • 画像サイズは、大文字の「W」「H」で取得できる。W が画像の横幅。H が画像の縦幅。だと思う。たぶん。もっとも、画像サイズ(ドット数)に関わらず、x や y は -1.0 〜 +1.0 の値を取るはずなので、W も H も使わずに処理できる場合が多いかも。
  • 円周率は pi と書く。

sin()、cos()、tan() に与える値は、単位が度なのかラジアンなのか、ちょっとよく分からず。 _The MathMap Language Reference Manual 内で、単位が明記されてる場所が見つからなくて。関数として、rad2deg() (ラジアンから度への変換)と、deg2rad() (度からラジアンへの変換)が用意されてるあたり、ラジアンを渡しそうな気もするのだけど…。

以上です。

過去ログ表示

Prev - 2016/04 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project